我希望在Windows上使用非空超时中断select
。我正在使用QueueUserAPC
来关闭等待的套接字,但我并不相信阻止选择始终是一个可警告的等待。
注意:当发出阻止Winsock调用时,例如select timeout参数设置为NULL,Winsock可能需要等待网络 呼叫完成前的事件。 Winsock执行警报 在这种情况下等待 ,这可以被异步中断 程序调用(APC)安排在同一个线程上。发出另一个阻止 Winsock在一个APC中调用,该APC中断正在进行的阻塞Winsock调用 在同一个线程上将导致未定义的行为,绝不能尝试 由Winsock客户提供。
等待线程:
timeval tv = {}
select(socket, &tv) // block until socket is closed
控制线程:
def CloseFunc:
closesocket(socket)
QueueUserAPC(CloseFunc) // enqueue the close