重启我的服务器端应用程序后,我的客户端操作系统没有检测到死tcp连接。僵尸连接将保持已建立的状态,并且永远不会被操作系统关闭。是否有人对此有任何想法?
这是端口9888上的服务器端连接:
这是与服务器的客户端连接:
我的操作系统的一些信息:
答案 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
希望这有帮助。