使用.NET'Async'API防止TIME_WAIT

时间:2010-11-29 17:34:06

标签: c# .net network-programming

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

2 个答案:

答案 0 :(得分:6)

我发现不可能阻止TIME_WAIT。服务器或客户端都会有任何问题,这取决于谁先启动连接关闭。如果是关闭连接的客户端,则服务器上将没有TIME_WAIT。如果是首先关闭的服务器,则客户端上不会有TIME_WAIT。所以剩下要做的唯一选择是使用SO_REUSEADDR,但在这种情况下it is still impossible to use the reused address for contacting previously disconnected host

答案 1 :(得分:2)

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

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