首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >中断正在连接的windows wsa套接字

中断正在连接的windows wsa套接字
EN

Stack Overflow用户
提问于 2012-03-10 18:02:09
回答 1查看 434关注 0票数 0

我想知道是否有可能中断对windows socket "connect“函数的调用?

问题是我的代码需要在不同的线程中完成(这样GUI线程才能继续运行)。但是当程序关闭时,仍然会有调用"connect“的线程等待WSAETIMEDOUT异常。

有什么想法吗?

更新/提示:我不能调用close(),因为我只有在connect()返回时才有一个有效的句柄。后一种情况在使用阻塞套接字并具有到防火墙位置的tcp连接时不是这种情况(例如) :/

EN

回答 1

Stack Overflow用户

发布于 2012-03-11 08:47:02

如果套接字处于阻塞模式,则中止connect()调用的唯一方法是从与调用connect()的线程上下文不同的线程上下文关闭套接字。connect()将返回一个错误,然后线程可以正常退出。

如果套接字处于非阻塞或重叠模式,connect()将立即返回WSAEWOULDBLOCK错误,然后您必须调用select()WSAAsyncSelect(FD_CONNECT)WSAEventSelect(FD_CONNECT)来检测连接何时建立,然后才能继续套接字工作。由于调用线程在connect()上没有被阻塞,因此它可以定期检查来自其余代码的任何终止/中止信号,如果检测到,则关闭套接字(如果需要)并正常退出。

如果您以非阻塞或重叠模式编写套接字代码,那么您实际上不需要使用线程。您可以在不阻塞UI的情况下在主线程中执行套接字工作,然后在需要时只需关闭套接字。以这种方式编写代码需要更多的工作,但它确实可以工作。或者,您可以继续使用线程。它将使您的套接字代码与您的UI代码分离,因此更易于管理。

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

https://stackoverflow.com/questions/9645557

复制
相关文章

相似问题

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