最近有朋友问是不是CLOSE_WAIT状态只出现在客户端,仅连接被动关闭的时候才出现。
事实上,CLOSE_WAIT既可以出现在客户端,也可以出现在服务器端。
比如,A和B连接,我们不管哪一方是服务器,哪一方是客户端
如果A调用closesocket,这时它会发送一个FIN到B,B的TCP协议栈会返回一个ACK(应用程序不需要做什么ACK就自动返回了)。这个时候A处于FIN_WAIT_2,B处于CLOSE_WAIT状态。
如果B方的应用层再调用closesocket的话,则A处于TIME_WAIT状态。
由于没有A、B区别客户端和服务器,所以CLOSE_WAIT状态在客户端、服务器上都可以出现