我有一个监听线程,等待使用select和FD_SET在几个套接字上读取。故事是。在某个时候,我将向池中添加另一个套接字,并且需要中止选择并重新初始化选择的FD_SET数组。我有一个事件来通知池更改。但是select如何对我的 Activity 使用react?
select()在此时间点使用timeval,等待间隔为20秒,我不想将时间更改为较低的值。我不想通过超时频繁地重新启动select()...
有什么方法可以中止选择吗?什么是正确的方法来通知/重新启动选择并强制使用新的套接字列表(至少一个套接字将添加到池中)
另一个问题-Msdn说:“选择功能确定一个或多个套接字的状态,必要时等待执行同步I/O。”
这是否意味着select不适用于使用异步操作转换为使用的套接字?
最佳答案
使用WSAEventSelect()
和WSAWaitForMultipleEvents()
代替select()
。这样,您的池可以使用WSACreateEvent()
创建一个单独的事件,并使用WSASetEvent()
发出信号,以在需要时唤醒WSAWaitForMultipleEvents()
。