我只是想知道是否可以中断对windows socket“connect”函数的调用?
问题是我的代码要求在不同的线程中完成(因此GUI线程一直在运行)。但是当程序关闭时,我仍然是调用“连接”的线程,这些线程正在为WSAETIMEDOUT异常而烦恼。
有什么想法吗?
更新/提示:我不能调用close()因为我在connect()返回时只有一个有效的句柄。当使用阻塞套接字并将tcp-connect连接到防火墙位置时(例如),后者不是这种情况:/
答案 0 :(得分:0)
如果套接字处于阻塞模式,则中止connect()
调用的唯一方法是从与调用connect()
的线程上下文不同的线程上下文关闭套接字。 connect()
将返回错误,然后线程可以正常退出。
如果套接字处于非阻止或重叠模式,connect()
将立即返回WSAEWOULDBLOCK
错误,然后您必须致电select()
,WSAAsyncSelect(FD_CONNECT)
,或WSAEventSelect(FD_CONNECT)
在继续执行套接字工作之前检测连接何时建立。由于调用线程未在connect()
上被阻止,因此可以自由地定期检查来自其余代码的任何终止/中止信号,如果检测到则关闭套接字(如果需要)并正常退出。 / p>
如果您以非阻塞或重叠模式编写套接字代码,那么您实际上不需要使用线程。您可以在主线程中执行套接字工作而不会阻止UI,然后您可以在需要时关闭套接字。以这种方式编码需要更多的工作,但它确实有效。或者您可以继续使用线程。它会使您的套接字代码与您的UI代码分开,从而更容易管理。