tcp 0 0 127.0.0.2:6000 0.0.0.0:* LISTEN 4462/./ser
tcp 0 0 127.0.0.2:6000 127.0.0.2:33797 SYN_RECV -
tcp 0 0 127.0.0.2:33796 127.0.0.2:6000 ESTABLISHED 4467/./cli
tcp 0 0 127.0.0.2:33797 127.0.0.2:6000 ESTABLISHED 4469/./cli
tcp 0 0 127.0.0.2:6000 127.0.0.2:33795 ESTABLISHED -
tcp 0 0 127.0.0.2:6000 127.0.0.2:33796 ESTABLISHED -
tcp 0 0 127.0.0.2:33795 127.0.0.2:6000 ESTABLISHED 4464/./cli
打开了三个客户端与服务器端建立连接,一个客户端发起之后会有两个条目产生,在开始前的两个client建立连接时,产生的服务器端和客户端段的状态都是estblisted,但是直到第三个时,客户端的状态端是estbllished,服务器端的是sys_recv状态。
猜测在listen时已经发了三次握手中的前两次,但是第三此客户端给服务器端发送的ack可能需要accept来接收才能建立完全的连接
在第三个报文的时候连接的状态
服务器虽然受到了客户端的sys报文也回复了sys报文使得客户端进入了estblished状态,但是服务器端仍然停留在sys_recv状态
如果将服务器端accept加入,如下
listen(sockfd, 1);//宣告可以接受连接请求
while (1)
{
c = accept(sockfd, (struct sockaddr*)&caddr, &len);
cout<<"a connect estblished"<<endl;
}
那么客户端来多少服务器都能与之建立连接,打印出"a connect estblished"
所以,listen后的backlog就是在监听过程中建立前两次连接成功的队列数量,一旦accept成功接受,就会从该队列中拿走已经成功的,让出位置给后续的连接