使用.NET’Async’API防止TIME_WAIT

我有一个问题,我开发了一个客户端和服务器包装器供我个人使用,但遗憾的是由于网络编程知识不足,我在客户端连接时遇到TIME_WAIT问题。 我的客户端现在尝试在短时间内与同一主机建立多个连接,我发现主要原因是因为我正在尝试重用套接字并且它进入TIME_WAIT状态因为我正在关闭没有正常关机的连接。 我想知道使用.NET套接字关闭连接的正确模式,以防我强烈使用’Async’API,即ConnectAsync,AcceptAsync,SendAsync,ReceiveAsync,DisconnectAsync等function(DisconnectAsync – 重用套接字)

您可以在套接字上使用SO_REUSEADDR来解决此问题。 有关详细信息,请参阅Socket.SetSocketOption ,它是您需要设置的ReuseAddress选项。

顺便说一句,你真的不是指重复使用socket吗? 一旦出现错误,您必须关闭它并打开一个新错误。

我发现不可能阻止TIME_WAIT。 服务器或客户端都会有任何问题,这取决于谁先启动连接关闭。 如果是关闭连接的客户端,则服务器上将没有TIME_WAIT。 如果是首先关闭的服务器,则客户端上不会有TIME_WAIT。 所以剩下要做的唯一选择是使用SO_REUSEADDR,但在这种情况下,仍然无法使用重用地址来联系先前断开连接的主机