tcp连接可以';当tcp连接状态为'TIME\u WAIT'时,无法建立`

tcp连接可以';当tcp连接状态为'TIME\u WAIT'时,无法建立`,c,linux,tcp,network-programming,C,Linux,Tcp,Network Programming,我编写了一个简单的tcp客户端和服务器 然后运行它们 我注意到当我使用ctrl+c结束程序时 无法关闭tcp连接 但是tcp连接状态类似于TIME\u WAIT 然后,如果我再次运行tcp客户端和服务器 无法再次建立tcp连接 tcp服务器始终发送RST数据包 我必须等待一段时间,直到下一个tcp连接可以建立 这是什么原因?如何处理这个问题 此外,我注意到在一台主机上,当tcp连接处于状态FIN\u WAIT\u 2 即使它没有收到FIN,tcp连接也会在一段时间后关闭 为什么? 谢谢此问题的解

我编写了一个简单的tcp客户端和服务器 然后运行它们 我注意到当我使用
ctrl+c
结束程序时 无法关闭tcp连接 但是tcp连接状态类似于
TIME\u WAIT
然后,如果我再次运行tcp客户端和服务器 无法再次建立tcp连接 tcp服务器始终发送
RST
数据包 我必须等待一段时间,直到下一个tcp连接可以建立

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

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


谢谢

此问题的解决方案是设置SO\u REUSEADDR套接字选项。这告诉堆栈允许绑定恰好处于时间等待状态的地址

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


这里有一个关于TCP和UDP使用SO_REUSEADDR的示例。

请使用更多标点符号!