监听socket

函数原型

1
2
#include <sys/socket.h>
int listen(int sockfd,int backlog);

形参

sockfd参数指定了需要监听的socket,backlog指定了内核监听队列的最大长度。

返回值

成功时,返回0,失败则返回-1,并设置errno。

有关backlog的知识

监听队列的长度如果超过backlog,服务器将不受理新的客户连接,客户端也将收到ECONNREFUSED错误信息。

在内核版本2.2之前的Linux中,backlog参数是指所有处于半连接状态(SYN_RCVD)和完全连接状态(ESTABLISHED)的socket的上限。但是自2.2版本后,它只表示处于完全连接状态的socket的上限。处于半连接状态的socket的上限则由/proc/sys/net/ipv4/tcp_max_syn_backlog内核参数定义。