listen()函数

2017-09-10  本文已影响0人  狗尾巴草败了

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()时,已完成连接队列的对头将返回给进程,如果队列为空,那么进程将投入睡眠。

上一篇下一篇

猜你喜欢

热点阅读