Socket - Xinrea/Learn GitHub Wiki

Socket中的TCP三次握手 - 建立连接

client[connect()阻塞]---------SYN J---------->server[accept()阻塞]
                                                |
client[connect()返回]<----ACK J+1, SYN K------server[accept()阻塞]
   |
client[connect()返回]--------ACK K+1--------->server[accept()返回]

如上所示,三次握手中,第二次握手时客户端connect()返回;第三次握手时服务端accept()返回。

Socket中的TCP四次握手 - 释放连接

client[close()]---------FIN J---------->server
                                           |
client<-----------------ACK J+1---------server

另一边关闭连接同上

shutdown()和close()

close()不会唤醒堵塞的recv()和accept(),因此不会立即关闭Socket,而是等待recv()和accept()的完成

shutdown()会唤醒休眠中的recv()和accept(),使其结束,立即关闭Socket。