如果Windows'选择功能块,是否始终是一个警觉的等待?

时间:2015-06-04 20:42:57

标签: c windows multithreading select winsock

我希望在Windows上使用非空超时中断select。我正在使用QueueUserAPC来关闭等待的套接字,但我并不相信阻止选择始终是一个可警告的等待。

QueueUserAPC function

select function

  

注意:当发出阻止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

How to cancel waiting in select() on Windows

0 个答案:

没有答案