socket编程之listen

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状态。

socket编程之listen_第1张图片

猜测在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"<
那么客户端来多少服务器都能与之建立连接,打印出"a connect estblished"

所以,listen后的backlog就是在监听过程中建立前两次连接成功的队列数量,一旦accept成功接受,就会从该队列中拿走已经成功的,让出位置给后续的连接

你可能感兴趣的:(Linux编程,网络,socket,listen)