@@ -11,52 +11,62 @@ local socket = {}
1111--- @return number @skynet 对套接字描述符的表示
1212function socket .open (addr , port )
1313end
14+
1415--- * 绑定系统文件描述符
1516--- @param os_fd number
1617--- @return number @skynet 对套接字描述符的表示
1718function socket .bind (os_fd )
1819end
20+
1921--- * 等价于 socket.bind(0),绑定到标准输出
2022--- @return number @skynet 对套接字描述符的表示
2123function socket .stdin ()
2224end
25+
2326--- * accept 是一个函数。每当一个监听的 id 对应的 socket 上有连接接入的时候,都会调用 accept 函数。这个函数会得到接入连接的 id 以及 ip 地址。你可以做后续操作。
2427--- * 开始收发套接字数据,并设置一个回调
2528--- * 这个函数会将套接字索引与一个 Lua 的结构封装起来,并在协程内挂起 (skynet.wait)
2629--- * 当有数据事件到达时,就会 skynet.wakeup 协程来
2730--- @param id number @skynet 套接字索引
28- --- @param accept fun ( ... ) @事件回调函数
31+ --- @param accept ? fun ( ... ) @事件回调函数,监听字才需要这个
2932--- @return number | nil , error
3033function socket .start (id , accept )
3134end
35+
3236--- * 暂停收发一个套接字上的数据
3337--- @param id number @skynet 套接字索引
3438function socket .pause (id )
3539end
40+
3641--- * 强行关闭一个连接。和 close 不同的是,它不会等待可能存在的其它 coroutine 的读操作。
3742--- * 一般不建议使用这个 API ,但如果你需要在 __gc 元方法中关闭连接的话,shutdown 是一个比 close 更好的选择(因为在 gc 过程中无法切换 coroutine)
3843--- @param id number @skynet 套接字索引
3944function socket .shutdown (id )
4045end
46+
4147--- * 在极其罕见的情况下,需要粗暴的直接关闭某个连接,而避免 socket.close 的阻塞等待流程,可以使用它。
4248--- @param id number @skynet 套接字索引
4349function socket .close_fd (id )
4450end
51+
4552--- * 关闭一个连接,这个 API 有可能阻塞住执行流。因为如果有其它 coroutine 正在阻塞读这个 id 对应的连接,会先驱使读操作结束,close 操作才返回。
4653--- @param id number @skynet 套接字索引
4754function socket .close (id )
4855end
56+
4957--- 从一个 socket 上读 sz 指定的字节数。如果读到了指定长度的字符串,它把这个字符串返回。如果连接断开导致字节数不够,将返回一个 false 加上读到的字符串。如果 sz 为 nil ,则返回尽可能多的字节数,但至少读一个字节(若无新数据,会阻塞)。
5058--- @param id number @skynet 套接字索引
5159--- @param sz number | nil @要读取的字节数, nil 尽可能多的读
5260--- @return string | nil , string
5361function socket .read (id , sz )
5462end
63+
5564--- * 从一个 socket 上读所有的数据,直到 socket 主动断开,或在其它 coroutine 用 socket.close 关闭它。
5665--- @param id number @skynet 套接字索引
5766--- @return buffer | nil , buffer
5867function socket .readall (id )
5968end
69+
6070--- * 从一个 socket 上读一行数据。sep 指行分割符。默认的 sep 为 "\n"。读到的字符串是不包含这个分割符的。
6171--- @param id number @skynet 套接字索引
6272--- @return buffer | nil , buffer
6777--- @param id number @skynet 套接字索引
6878function socket .block (id )
6979end
80+
7081--- * 是否合法套接字
7182--- @param id number @skynet 套接字索引
7283--- @return boolean
7384function socket .invalid (id )
7485end
86+
7587--- * 是否已断开
7688--- @param id number @skynet 套接字索引
7789--- @return boolean
8092
8193--- * 监听一个端口,返回一个 id ,供 start 使用。
8294--- @param host string @地址,可以是 ip : port
83- --- @param port number @断开 ,可为 nil ,此时从 host 内获取端口信息
84- --- @param backlog number @队列长度
95+ --- @param port ? number @端口 ,可为 nil ,此时从 host 内获取端口信息
96+ --- @param backlog ? number @队列长度
8597--- @return number @skynet 套接字索引
8698function socket .listen (host , port , backlog )
8799end
100+
88101--- * 清除 socket id 在本服务内的数据结构,但并不关闭这个 socket 。这可以用于你把 id 发送给其它服务,以转交 socket 的控制权。
89102function socket .abandon (id )
90103end
104+
91105--- * 设置缓冲区大小
92106--- @param id number @skynet 套接字索引
93107--- @param limit number @缓冲区大小
94108function socket .limit (id , limit )
95109end
110+
96111function socket .udp (callback , host , port )
97112end
113+
98114function socket .udp_connect (id , addr , port , callback )
99115end
116+
100117function socket .warning (id , callback )
101118end
119+
102120function socket .onclose (id , callback )
103121end
122+
104123--- * 把一个字符串置入正常的写队列,skynet 框架会在 socket 可写时发送它。
105124--- * 这和 socketdriver.send 是一个
106125--- @see socketdriver #send
107126--- @param id number @skynet 套接字索引
108127--- @param msg string @数据
109- --- @param sz number @大小
128+ --- @param sz ? number @大小,如果是字符串则不需要
110129function socket .write (id , msg , sz )
111130end
131+
112132--- * 把字符串写入低优先级队列。如果正常的写队列还有写操作未完成时,低优先级队列上的数据永远不会被发出。只有在正常写队列为空时,才会处理低优先级队列。但是,每次写的字符串都可以看成原子操作。不会只发送一半,然后转去发送正常写队列的数据。
113133--- @param id number @skynet 套接字索引
114134--- @param msg string @数据
115135function socket .lwrite ()
116136end
137+
117138function socket .header ()
118139end
119140
0 commit comments