首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >取消阻止被阻止的Winsock accept()调用

取消阻止被阻止的Winsock accept()调用
EN

Stack Overflow用户
提问于 2012-01-04 01:48:18
回答 3查看 7.1K关注 0票数 7

我使用的是VS2008下的Winsock。

我有一个线程专门用来通过阻塞调用accept()来接受传入的TCP连接请求。当我的应用程序关闭的时候,我需要以某种方式解除这个线程的阻塞,这样它就可以执行关闭工作并退出。有没有一种方法可以让我不阻塞accept()呢?

我将发布另一个问题,以防无法取消阻止accept()。这个问题是:如果我硬终止在accept()上被阻塞的线程,会发生什么不好的事情( OS数据结构的损坏,等等)吗?

谢谢,戴夫

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-01-04 07:37:29

解除阻塞accept()的唯一方法是关闭另一个线程的侦听套接字。否则,您需要将侦听套接字置于非阻塞模式,并使用select() (它支持超时)来检测何时可以在不阻塞的情况下调用accept()

票数 9
EN

Stack Overflow用户

发布于 2019-04-08 02:31:42

解除阻止来自另一个线程的accept()调用的一种健壮方法是使用connect()创建连接。当然,线程需要知道正在侦听的IP地址和端口。

票数 1
EN

Stack Overflow用户

发布于 2019-09-16 09:05:46

直接且特定于Windows,closesocket()返回时没有错误,并解锁了调用accept()的线程。

select()上的轮询并不是您真正想要的!从一个额外的线程连接并不是你真正想要的!

例如,对于linux,close( socket )不会解除侦听线程的阻塞,但shutdown(socket,SHUT_RD)会;另外需要关闭socket。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8716464

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档