我使用的是VS2008下的Winsock。
我有一个线程专门用来通过阻塞调用accept()来接受传入的TCP连接请求。当我的应用程序关闭的时候,我需要以某种方式解除这个线程的阻塞,这样它就可以执行关闭工作并退出。有没有一种方法可以让我不阻塞accept()呢?
我将发布另一个问题,以防无法取消阻止accept()。这个问题是:如果我硬终止在accept()上被阻塞的线程,会发生什么不好的事情( OS数据结构的损坏,等等)吗?
谢谢,戴夫
发布于 2012-01-04 07:37:29
解除阻塞accept()的唯一方法是关闭另一个线程的侦听套接字。否则,您需要将侦听套接字置于非阻塞模式,并使用select() (它支持超时)来检测何时可以在不阻塞的情况下调用accept()。
发布于 2019-04-08 02:31:42
解除阻止来自另一个线程的accept()调用的一种健壮方法是使用connect()创建连接。当然,线程需要知道正在侦听的IP地址和端口。
发布于 2019-09-16 09:05:46
直接且特定于Windows,closesocket()返回时没有错误,并解锁了调用accept()的线程。
select()上的轮询并不是您真正想要的!从一个额外的线程连接并不是你真正想要的!
例如,对于linux,close( socket )不会解除侦听线程的阻塞,但shutdown(socket,SHUT_RD)会;另外需要关闭socket。
https://stackoverflow.com/questions/8716464
复制相似问题