listen(2) - Linux 手册页
名称
listen - 监听 socket 的连接概要
#include <sys/types.h> /* See NOTES */ #include <sys/socket.h> int listen(int sockfd, int backlog);
描述
sockfd 参数是指向类型为 SOCK_STREAM 或 SOCK_SEQPACKET 的 socket 的文件描述符。
backlog 参数定义了 sockfd 的待处理连接队列的最大长度。如果连接请求在队列已满时到达,客户端可能会收到一个带有 ECONNREFUSED 指示的错误,或者,如果底层协议支持重传,则该请求可能会被忽略,以便稍后的连接重试成功。
返回值
成功时返回零。出错时返回 -1,并相应地设置 errno。错误
- EADDRINUSE
- 另一个 socket 已经在相同的端口上监听。
- EBADF
- 参数 sockfd 不是有效的描述符。
- ENOTSOCK
- 参数 sockfd 不是一个套接字。
- EOPNOTSUPP
- socket 的类型不支持 listen() 操作。
符合
4.4BSD, POSIX.1-2001。listen() 函数调用首次出现在 4.2BSD 中。说明
要接受连接,执行以下步骤POSIX.1-2001 不要求包含 <sys/types.h>,且在 Linux 上也不需要此头文件。然而,一些历史(BSD)实现需要此头文件,编写可移植应用程序时包含它是明智的。
在 TCP socket 上,backlog 参数的行为在 Linux 2.2 中发生了变化。现在它指定了等待被接受的 *完全* 建立的 socket 的队列长度,而不是未完成连接请求的数量。未完成 socket 队列的最大长度可以使用 /proc/sys/net/ipv4/tcp_max_syn_backlog 设置。当启用 syncookies 时,没有逻辑上的最大长度,并且此设置将被忽略。有关更多信息,请参阅 tcp(7)。
如果 backlog 参数大于 /proc/sys/net/core/somaxconn 中的值,则它将被无声地截断为该值;此文件中的默认值为 128。在 2.4.25 之前的内核中,此限制是一个硬编码值,SOMAXCONN,其值为 128。