C++--问题14--listen()第二个参数代表什么

C++--问题14--listen()第二个参数代表什么


函数原型:

int listen(int sockfd, int backlog)

参数解释:

(1)sockfd:是调用socket()函数创建的socket描述符(套接字号)

(2)backlog:指定内核为此套接字维护的最大连接个数,该队列不能太长也不能没有,因为当队列太长时,需要耗费一定的资源进行维护和管理,没有的话也会降低操作系统的效率

(3)返回值:listen()成功时返回0,错误时返回-1。

函数功能:
listen()函数仅被TCP类型的服务器程序调用,实现监听服务,它实现2件事情:

(1) 当socket()创建1个socket时,被假设为主动式套接字,也就是说它是一个将调用connect()发起连接请求的客户端套接字;函数listen()将套接口转换为被动式套接字,指示内核接受向此套接字的连接请求,调用此系统调用后tcp 状态机由close转换到listen。
(2)第2个参数指定了内核为此套接字排队的最大连接个数。同一时间服务器能最大接收到客户端请求数量。

listen用在bind()之后,accept()之前

listen(sockfd,5)  

         Linux:已完成三次握手的队列长度

         Unix:已完成+未完成的队列长度

Unix中,监听端口后,被动套接字会等待连接,此时系统维护着两个队列,第一个队列存放的是已建立连接的套接字(即完成三次握手后的),第二个队列存放的是未建立连接的套接字(处在三次握手中的)。每次accept函数会将第一个队列中的套接字返回,进行通信,以完成网络传输。

所以listen的第二个参数意味着这两个队列的总和大小。

猜你喜欢

转载自blog.csdn.net/qq_41103495/article/details/108501919