linux没有检测到死tcp连接

时间:2014-08-26 09:52:27

标签: linux sockets tcp centos

重启我的服务器端应用程序后,我的客户端操作系统没有检测到死tcp连接。僵尸连接将保持已建立的状态,并且永远不会被操作系统关闭。是否有人对此有任何想法?

这是端口9888上的服务器端连接: enter image description here

这是与服务器的客户端连接: enter image description here

我的操作系统的一些信息: enter image description here

1 个答案:

答案 0 :(得分:4)

您可能希望使用TCP keep alive机制来检测死对等体。正如评论中正确提到的,您需要使用setsockopt函数调用set socket选项,

SO_KEEPALIVE - 启用/禁用TCP保持活动机制

TCP_KEEPIDLE - TCP开始发送keepalive探测的空闲时间(以秒为单位)

TCP_KEEPCNT - TCP在丢弃连接之前应发送的最大keepalive探测数

TCP_KEEPINTVL - 各个keepalive探测之间的时间(以秒为单位)

因此,例如,如果您设置理想时间= 60秒,cnt = 5且间隔= 2秒,系统将在70秒不活动后断开连接。

更多详情可在以下网站获取

http://tldp.org/HOWTO/TCP-Keepalive-HOWTO/overview.html

希望这有帮助。