(1)当socket函数创建一个套接字时,它被假定为一个主动套接字;listen函数把一个未连接的套接字转换成一个被动套接字;

(2)listen函数的第二个参数规定了内核应该为相应套接字排队的最大连接数

#include <sys/socket.h>
int listen(int sockfd, int backlog);
    返回:成功返回0,出错则为-1

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

  I.  未完成队列,每个SYN分节对应其中的一项;这些套接字处于SYN_RCVD状态;

  II. 已完成队列,这些套接字处于ESTABLISTEND状态

  

(4)TCP三路握手和监听套接字的两个队列