我曾经认为使用SocketOptionName.ReuseAddress可以重用处于TIME_WAIT状态的端口。但是我进行了实验,发现它似乎没有任何效果。
如果我使用netstat检查socket,并且显示socket处于TIME_WAIT状态,然后立即再次运行客户端,我会收到异常:
“只允许每个套接字地址(协议/网络地址/端口)使用一次,通常允许172.16.16.16:12345”
我无法理解其中的含义。请问SocketOptionName.ReuseAddress有什么作用?
如果我使用netstat检查socket,并且显示socket处于TIME_WAIT状态,然后立即再次运行客户端,我会收到异常:
“只允许每个套接字地址(协议/网络地址/端口)使用一次,通常允许172.16.16.16:12345”
我无法理解其中的含义。请问SocketOptionName.ReuseAddress有什么作用?
TIME_WAIT
状态,而你希望它们不会。通常,有更好的方法来解决这个特定的问题:1)你能否将主动关闭移到客户端?2)如果不能,你能否进行异常关闭并发送RST
而不是正常关闭?等等。尽管如此,至少你尝试了这条路,而不是简单地决定缩短整个机器的TIME_WAIT
期限...在这里搜索,有很多相关问题。 - Len Holgate