我正在使用 Socket 来侦听新连接。如何中断同步 Socket.Accept() 方法?我如何终止此呼叫?

I'm using Socket to listen for new connections. How do I break out of synchronous Socket.Accept() method? How do I terminate this call?

我明白,Socket.Accept() 是一个阻塞调用,它没有超时 属性(比如 ReceiveTimeout 或 SendTimeout)。因此线程将无限期地等待新连接的到来。

所以我的问题是,如何在特定时间点后终止此呼叫。我应该考虑从其他线程关闭侦听套接字吗?

有更好的方法吗?

您可以使用 Socket.Poll,它允许您等待超时连接。用 SelectMode.SelectRead 调用它,如果它 returns true 有一个挂起的连接,您可以在不阻塞的情况下接受它。