网上的回答分为两种,更认可第一种说法,更加有理有据并且有实际的尝试。
文章目录
listen函数原型
-
int listen(int sockfd, int backlog);
- 第一个参数我们都知道是socket返回的描述符
- 第二个参数表示什么呢,之前一直以为是connet的连接数量,但后面写小项
第一种解释
这张图是展示的三次握手的过程,这里我们要关注两个队列
未完成三次握手的队列
:每个这样的SYN分对应其中的一项,某个客户端发起了请求并到达服务端,而服务器正在等待处理对应的三次握手过程。这些套接口处于SYN_RCVD。已完成队列
:每个都已经完成了三路握手过程的客户端对应其中一项。这些套接口处于ESTABLISHED。
如何理解这两个队列:
如何理解这两个队列
-
比如未完成的队列设置为50,现在有并发100个请求,假如系统处理速度缓慢,则系统会做这几件事
- 因为未完成的队列设置为50个,系统会先拿50个请求来处理三次握手,其他的请求直接拒绝。TCP会忽略该分节,也就是不发送RST(RST为重置连接,一般是在FIN之后才会出现为1的情况,