【问题标题】:tcp connection can't be established when there is a tcp connection with state `TIME_WAIT`当存在状态为“TIME_WAIT”的 tcp 连接时,无法建立 tcp 连接
【发布时间】:2013-04-07 12:50:06
【问题描述】:

我写了一个简单的tcp客户端和服务器 并运行它们 我注意到当我使用ctrl+c 结束程序时 tcp 连接被关闭 但是 tcp 连接状态就像TIME_WAIT 那么如果我再次运行 tcp 客户端和服务器 无法再次建立 tcp 连接 RST 数据包总是由 tcp 服务器发送 我得等一段时间才能建立下一个tcp连接

这是什么原因以及如何处理这个问题?

此外,我注意到在一台主机上,当 tcp 连接处于状态 FIN_WAIT_2 即使它没有收到FIN,tcp 连接也会在一段时间后关闭 ,为什么?

谢谢

【问题讨论】:

  • 请使用更多的标点符号!

标签: c linux tcp network-programming


【解决方案1】:

解决这个问题的方法是设置 SO_REUSEADDR 套接字选项。这告诉堆栈允许绑定碰巧处于 TIME_WAIT 状态的地址。

TIME_WAIT 状态的原因似乎是为了让散乱的数据包有一些时间到达。如果堆栈无法确保连接正常关闭,则可能有数据包在传输中,或者发送方甚至可能正在主动发送更多数据。堆栈希望避免将这些数据包与新绑定连接的流量混合。

这是一个good answer,关于将 SO_REUSEADDR 用于 TCP 和 UDP。

【讨论】:

    猜你喜欢
    • 2012-11-11
    • 1970-01-01
    • 1970-01-01
    • 2019-05-26
    • 2014-03-15
    • 2019-05-08
    • 2014-08-30
    • 2016-11-30
    • 1970-01-01
    相关资源
    最近更新 更多