listen()函数

listen()函数仅有TCP服务器调用

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

调用listen(),导致套接字从CLOSED状态变为LISTEN状态。
本函数通常在调用socket()和bind()函数之后,并在调用accept()之前

内核为任何一个给定的监听套接字维护两个队列:

  1. 未完成连接队列
    某个客户发送SYN请求到服务器,然后服务器将等待TCP三次握手完成的时期,这些套接字处于SYN_RCVD状态
  2. 已完成连接队列
    每个已完成的TCP三次握手过程的客户对应其中一项,这些套接字处于*ESTABLISHED状态

当三次握手正常完成,该套接字就从未完成连接队列移动到已完成连接队列的队尾。
当进程调用accept()时,已完成连接队列的对头将返回给进程,如果队列为空,那么进程将投入睡眠。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容