socket_accept(3) MudOS v21c2
(5 Sep 1994)
名称:
socket_accept() - 接受一个 socket 的连接(connection)
语法:
#include <socket_err.h>
int socket_accept( int s, string read_callback, string write_callback
);
整数 socket_accept( 整数 s, 字符串 read_callback, 字符串 write_callback
);
用法:
参数 s 是一个已用 socket_create(3) 建立、用 socket_bind(3) 指定了一个位址,并且正倾听(listen)在
socket_listen(3) 之后连接的 socket。socket_accept() 从未处理(pending)的连接序列中选取第一个连接,建立一个和
s 相同属性的新 socket 并且配置一个新的描述值(descriptor)。如果在序列中没有未处理的连接,socket_accept()
会返回如后面会提到的错误值。这个被接受的 socket 将被用来从相连的另一端读写数据;它不能用来接受别的连接。原先的
socket s 则保持开启以接受未来的连接。
read_callback 这个参数是给驱动程序在一个新的 socket(不是正要接受的
socket)接收数据时调用的函数名称。这个读取回呼函数 (callback) 应该是下列格式:
void read_callback(int fd)
这里的 fd 是准备接收数据的 socket。
write_callback 这个参数是给驱动程序在新的 socket(不是正要接受的
socket)准备好写入时调用的函数名称。这个写入回呼函数应该是下列格式:
void write_callback(int fd)
这里的 fd 是准备好写入的 socket。
注意:如果新 socket 不正常关闭,譬如和 socket_close(3) 的调用结果不同的话,则会调用正要接受的
socket(不是新的 socket)的 close_callback。这个关闭回呼函数应该是如下格式:
void close_callback(int fd)
这里的 fd 是已关闭的 socket。
返回值:
socket_accept() 在成功时会返回一个对于已接受 socket 的非负数描述值。失败时,它返回一个负值。socket_error(3)
可以用来得到这个错误码的文字语句。
错误值:
EEFDRANGE 描述值超出范围。
EEBADF 无效的描述值。
EESECURITY 企图违反安全。
EEMODENOTSUPP 不支援此 socket 类型。
EENOTLISTN socket 不在倾听中。
EEWOULDBLOCK 操作将被停滞(block)。
EEINTR 中断的系统调用。
EEACCEPT 接受问题。
EENOSOCKS 没有多余的 efun sockets。
参照:
翻译:
Kenny@Broken.History 97.Jul.26 (printed 3/16/95)
回到上一页