socket_accept(3) MudOS (5 Sep 1994) socket_accept(3) 名称: socket_accept() - 接受一个 socket 的连接(connection) 语法: #includeint 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。 参照: socket_bind(3), socket_connect(3), socket_create(3), socket_listen(3) 翻译: [email protected] 97.Jul.26 (printed 3/16/95)