gpt4 book ai didi

c - 存在状态为 `TIME_WAIT` 的 tcp 连接时无法建立 tcp 连接

转载 作者:可可西里 更新时间:2023-11-01 02:49:23 25 4
gpt4 key购买 nike

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

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

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

谢谢

最佳答案

这个问题的解决方案是设置 SO_REUSEADDR 套接字选项。这告诉堆栈允许绑定(bind)恰好处于 TIME_WAIT 状态的地址。

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

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

关于c - 存在状态为 `TIME_WAIT` 的 tcp 连接时无法建立 tcp 连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16014627/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com