【问题标题】:want to change TCP closing timeout想要更改 TCP 关闭超时
【发布时间】:2014-01-10 21:53:24
【问题描述】:

我们的 suse linux 服务器上正在使用一个客户端服务器应用程序。
有时会发生,在客户端,tcp 套接字不知何故消失了, 在服务器端,套接字的另一端仍然存在。

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

(我用 strace 看这个)。

当后端试图关闭一个 tcp 连接时,客户端已经没有任何东西了,它会向目标发送一个 [FIN, ACK] 数据包。当然,什么也没有回来。

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

现在,我不知道这 15 秒的超时是从哪里来的。我想改一下。

非常感谢您。

【问题讨论】:

  • 我建议您修复您描述的两个错误,而不是可能引入更多新代码。 1. 套接字不只是“消失”。它们被关闭,或者它们从应用程序中泄漏。套接字泄漏是一个主要问题,必须加以解决。 2. TCP 应用程序总是可以通过一种或另一种方式检测对等方的断开连接。如果您的应用程序没有这样做,那就是错误的编写,必须再次修复。

标签: linux sockets tcp


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-01-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-03
    • 2013-06-10
    • 2013-02-13
    相关资源
    最近更新 更多