繁体   English   中英

使用.NET'Async'API防止TIME_WAIT

[英]Preventing TIME_WAIT using .NET 'Async' API

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM