想要改变TCP关闭超时

时间:2014-01-10 13:43:37

标签: linux sockets tcp

我们的suse linux服务器上有一个客户端服务器应用程序 有时它会发生,在客户端,tcp套接字会以某种方式消失 在服务器端,套接字的另一端仍然存在。

在一天结束时,当我们停止linux服务器上的后端时,后端会尝试关闭所有剩余的tcp连接,也就是那些“僵尸”套接字。

(我用strace看这个。)

当后端尝试关闭tcp连接时,客户端上不再存在任何内容,它会向目标发送[FIN,ACK]数据包。当然,什么也没有回来。

后端重复发送此数据包。它第一次只等几百分之一秒重复它,然后等待的时间越来越长。最后它等待几秒钟重复它。但是,15秒后,有一个超时,它继续结束另一个 tcp连接。

现在,我不知道这15秒超时的来源。我想改变它。

非常感谢你。

1 个答案:

答案 0 :(得分:1)

我认为你可能有两个问题。

  • 您应该检测到客户端断开连接并关闭服务器端口的套接字,以便尽快释放该资源。您可以自己为应用程序层中没有活动的连接设置超时。阅读this
  • 如果您无法在应用层中处理“僵尸”套接字,则可以更改SO中的超时。阅读this