取消套接字轮询操作

Cancel a socket poll operation

本文关键字:操作 套接字 取消      更新时间:2023-10-16

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

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

当您要取消投票时,将字符写入管道,poll()将返回。 您将知道这是一个内部事件,因为它的索引为 0。

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

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

看看这个IoEvent类就是这样做的。