.net SocketOptionName.ReuseAddress用于什么?

.net SocketOptionName.ReuseAddress用于什么?,.net,sockets,tcp,.net,Sockets,Tcp,我曾经认为,使用SocketOptionName.ReuseAddress,我可以重用处于TIME\u WAIT状态的端口。但我试着用它做实验,似乎没有效果 如果我使用netstat检查套接字,它显示套接字处于TIME\u WAIT状态,并且我立即再次运行客户端,我会得到异常: 每个套接字地址(协议/网络地址/端口)通常只允许使用一次172.16.16.16:12345 我不能从中得到任何东西。请详细说明SocketOptionName.ReuseAddress适合做什么?首先为什么要绑定客户端

我曾经认为,使用
SocketOptionName.ReuseAddress
,我可以重用处于
TIME\u WAIT
状态的端口。但我试着用它做实验,似乎没有效果

如果我使用
netstat
检查套接字,它显示套接字处于
TIME\u WAIT
状态,并且我立即再次运行客户端,我会得到异常:

每个套接字地址(协议/网络地址/端口)通常只允许使用一次172.16.16.16:12345


我不能从中得到任何东西。请详细说明SocketOptionName.ReuseAddress适合做什么?

首先为什么要绑定客户端端口?您可能不需要,如果不需要,那么最好允许操作系统为您选择一个临时端口,这样您一开始就不会有这个问题

其次,为什么您认为重用一个等待时间不长的套接字是一个好主意;该状态的存在有一个合理的原因


至于为什么它对你不起作用,请看我在回答类似问题时发布的链接:

谢谢你的回答。在我的实际应用程序中,我没有将客户机绑定到端口。但该应用程序有很多传入连接,因此可能会耗尽可用端口(而不是处于TIME\u WAIT状态)。为了模拟这种情况,我明确地这样做了。所以你的实际问题是,你有一个服务器,有入站连接,它们最终会在
TIME\u WAIT
中结束,而你宁愿它们没有。一般来说,有更好的方法来解决这个问题:1)你能把主动关闭转移到客户端吗?2) 如果不能,是否可以执行中止关闭并发送
RST
而不是执行正常关闭?尽管如此,至少您尝试了这条路线,而不是简单地决定在机器范围内缩短等待时间。。。在这里搜索,有很多关于它的问题。