CSocket::CancelBlockingCall

void CancelBlockingCall( );

说明:
此成员函数用来取消一个当前在进行中的阻塞调用。这个函数取消该插槽的任何未完的阻塞操作。原来的阻塞调用一有可能就终止,并给出WSAEINTR错误。
在一次阻塞的Connect操作中,Windows 插槽实现一有可能就终止这个阻塞的调用,但是这对于释放socket资源来说是不可能的,要直到连接完成(然后被重置)或时间到时,资源才被释放。只有在应用程序立即尝试打开一个新的插槽(如果没有插槽可利用),或连接到相同的同级者时,这一点才是需要注意的。
除了Accept,取消任何操作都会使该插槽处于一种不确定的状态。如果一个应用程序取消了在一个插槽上的阻塞操作,则应用程序要能够在该插槽上显示,唯一能依赖的操作就是调用Closet,虽然其它的操作可能会对某些Windows 插槽起作用。如果你希望你的应用程序具有最大的可移植性,则你必须小心不要在一次取消后依赖于执行某些操作。
更多的信息,参见Win32 SDK文档中的“Windows Sockets设计思考”。

请参阅:
CAsyncSocket::Accept, CAsyncSocket::Close, CAsyncSocket::Connect, CSocket::IsBlocking, ::WSASetBlockingHook