listen()函数仅有TCP服务器调用
#include<sys/socket.h>
int listen(int sockfd, int backlog)
调用listen(),导致套接字从CLOSED状态变为LISTEN状态。
本函数通常在调用socket()和bind()函数之后,并在调用accept()之前
内核为任何一个给定的监听套接字维护两个队列:
- 未完成连接队列
某个客户发送SYN请求到服务器,然后服务器将等待TCP三次握手完成的时期,这些套接字处于SYN_RCVD状态 - 已完成连接队列
每个已完成的TCP三次握手过程的客户对应其中一项,这些套接字处于*ESTABLISHED状态
当三次握手正常完成,该套接字就从未完成连接队列移动到已完成连接队列的队尾。
当进程调用accept()时,已完成连接队列的对头将返回给进程,如果队列为空,那么进程将投入睡眠。
网友评论