取消套接字轮询操作

时间:2013-10-02 08:45:34

标签: c++ linux macos sockets

在我的Windows和Linux下运行软件的过程中,我不得不重写套接字层。在Windows上,我从select更改为WSAPoll并使用WSAWaitForMultipleEvents,然后在必要时在超时之前包含标准事件以取消操作。因为我必须处理超过1024个输入和输出套接字,所以我必须从linux上的select更改为poll。有没有办法取消linux下的轮询等待。我必须添加remoe连接,这将通过轮询的等待超时减慢。

1 个答案:

答案 0 :(得分:2)

使用pipe()创建一个伪内部事件,并将其读取方添加到poll()列表中,使其成为第一个事件。

如果要取消轮询,请向管道写入一个字符,poll()将返回。你会知道它是一个内部事件,因为它将有索引0。

您甚至可以通过在管道中传递不同的值来使其成为粗略的消息传递系统。

您可以使用手动事件对Windows代码执行相同的操作。

请参阅此IoEvent类。