何为 backlog 队列?
backlog 队列的大小表示 server 的 监听描述符 所能够容纳的来自客户端的 TCP 连接数。
通常,当一个应用通过 listen 系统调用创建了一个处于监听状态的描述符后, 需要指定一个 backlog 队列给描述符。
TCP 连接三次握手,一个 TCP 连接在处于 ESTABLISHEN 状态之前会经历一个中间态 SYN RECEIVED,之后便通过 accept 系统调用发送连接描述符给 application。这意味着一个 TCP/IP 栈有两个方法来实现 backlog 队列。
1、通过一个队列来实现。listen 系统调用函数中 backlog 参数的大小代表 backlog 队列的大小。当一个 SYN 网络包到达服务器的时候,服务器会发送一个 SYN/ACK 网络包,并且把这个连接扔进队列。当 ACK 响应包到达时,这个连接的状态将会变为 ESTABLISHED,并且