TCP连接问题之close_wait

首先 贴张图,先了解下close_wait是什么,在什么情况下产生

TCP连接问题之close_wait
通过上图,我们来分析,什么情况下,连接处于CLOSE_WAIT状态呢?
在被动关闭连接情况下,在已经接收到FIN,但是还没有发送自己的FIN的时刻,连接处于CLOSE_WAIT状态。
通常来讲,CLOSE_WAIT状态的持续时间应该很短,正如SYN_RCVD状态。但是在一些特殊情况下,就会出现连接长时间处于CLOSE_WAIT状态的情况。

出现大量close_wait的现象,主要原因是某种情况下对方关闭了socket链接,但是我方忙与读或者写,没有关闭连接。

那解决这个问题的基本思路就是: socket通信时保证对端socket未关闭且正常,一定要判断read、write等接口的返回值,根据错误状态及时close

另外 通过setsockopt()接口设置设置SO_KEEPALIVE选项 这种方式不推荐