一:listen()队列剖析
//listen():监听端口,用在 TCP连接中的服务器端 角色;
//listen()函数调用格式:
//int listen(int sockfd, int backlog);
//要理解好backlog这个参数,我们需要先谈一谈 “监听套接字 队列”的话题;
//(1.1)监听套接字的队列
//对于一个调用listen()进行监听的套接字,操作系统会给这个套接字 维护两个队列;
//a)未完成连接队列 【保存连接用的】
//当客户端 发送tcp连接三次握手的第一次【syn包】给服务器的时候,服务器就会在未完成队列中创建一个 跟这个 syn包对应的一项,
//其实,我们可以把这项看成是一个半连接【因为连接还没建立起来呢】,这个半连接的状态会从LISTEN变成 SYN_RCVD状态,同时给客户端返回第二次握手包【syn,ack】
//这个时候,其实服务器是在等待完成第三次握手;//b)已完成连接队列 【保存连接用的】
//当第三次握手完成了,这个连接就变成了ESTABLISHED状态,每个已经完成三次握手的客户端 都放在这个队列中作为一项;
//backlog曾经的含义:已完成队列和未完成队列里边条目之和 不能超过 backlog;