浙江丽水永利商务酒店:处于CLOSE_WAIT状态的socket表示什么,如何处理? ---写得好。 - Pra...

来源:百度文库 编辑:偶看新闻 时间:2024/04/30 06:09:37

处于CLOSE_WAIT状态的socket表示什么,如何处理? ---写得好。

当某一个节点的socket处于CLOSE_WAIT时,表示它收到了来自socket远端节点的FIN请求,并向远端节点发送了ACK。这个时候,该socket就会处于CLOSE_WAIT状态。接下来,正常情况应该是使用该socket的应用负责发出关闭这个socket的命令,然后这个socket向远端节点发出FIN,并进入正常关闭程序,直到socket完全关闭。如果这里提到的应用程序没有关闭socket,那么该socket就会一直出于CLOSE_WAIT状态,直至应用程序关闭或者系统重启。 下面的流程详细描述了整个socket的关闭过程。

client server

--> client sends -->


<-- server sends <--


<-- server sends <--

--> client sends -->

因此,当发现某个socket长时间处于CLOSE_WAIT状态,应该联系应用程序的工程师进行分析。从AIX的角度,我们可以对应用程序和系统的一些参数进行设置,以减小socket处于CLOSE_WAIT的时间。要做到这一点,首先需要在应用程序的socket属性里通过setsockopt函数设置SO_KEEPALIVE属性,然后修改系统的tcp_keepidle参数。默认的tcp_keepidle参数的值是14400,以半秒为单位,也就是2小时。修改方法如下:
# no -p -o tcp_keepidle=1200