我想知道是否有可能中断对windows socket "connect“函数的调用?
问题是我的代码需要在不同的线程中完成(这样GUI线程才能继续运行)。但是当程序关闭时,仍然会有调用"connect“的线程等待WSAETIMEDOUT异常。
有什么想法吗?
更新/提示:我不能调用close(),因为我只有在connect()返回时才有一个有效的句柄。后一种情况在使用阻塞套接字并具有到防火墙位置的tcp连接时不是这种情况(例如) :/
发布于 2012-03-11 08:47:02
如果套接字处于阻塞模式,则中止connect()调用的唯一方法是从与调用connect()的线程上下文不同的线程上下文关闭套接字。connect()将返回一个错误,然后线程可以正常退出。
如果套接字处于非阻塞或重叠模式,connect()将立即返回WSAEWOULDBLOCK错误,然后您必须调用select()、WSAAsyncSelect(FD_CONNECT)或WSAEventSelect(FD_CONNECT)来检测连接何时建立,然后才能继续套接字工作。由于调用线程在connect()上没有被阻塞,因此它可以定期检查来自其余代码的任何终止/中止信号,如果检测到,则关闭套接字(如果需要)并正常退出。
如果您以非阻塞或重叠模式编写套接字代码,那么您实际上不需要使用线程。您可以在不阻塞UI的情况下在主线程中执行套接字工作,然后在需要时只需关闭套接字。以这种方式编写代码需要更多的工作,但它确实可以工作。或者,您可以继续使用线程。它将使您的套接字代码与您的UI代码分离,因此更易于管理。
https://stackoverflow.com/questions/9645557
复制相似问题