.NET:如何在读取超时后继续使用套接字



在我的应用程序中,我想有一个轮询循环,该循环阻止套接字接收操作,但在 100 毫秒后超时。这将允许我在需要时退出循环(例如,用户单击UI中的某些内容(,同时避免使用繁忙循环或Thread.sleep。

但是,似乎一旦打开了 .NET 套接字,它就只能超时一次。第一次超时后,任何会阻止的调用都会立即引发异常。

根据此问题,"您无法超时或取消异步Socket操作。为什么不呢?在 .NET 世界中,是否有更好的方法来解决这个问题?

若要在 .NET 套接字上编写非繁忙轮询循环,可以使用轮询套接字方法,如下所示:

for (keepGoing) {
    if (mySocket.Poll(1000 * timeout_milliseconds, SelectMode.SelectRead)) {
        // Assert: mySocket.Available > 0.
        // TODO: Call mySocket.Receive or a related method
    }
}

在这种情况下,如果在指定的超时内没有数据可供从套接字读取,则Poll返回 false。如果另一个线程想要完全关闭轮询循环,则可以将keepGoing重置为 false。

相关内容

  • 没有找到相关文章

最新更新