取消套接字轮询操作
Cancel a socket poll operation
在我让软件在Windows和Linux下运行的旅程中,我不得不重写套接字层。在Windows上,我从select更改为WSAPoll,并使用WSAWaitForMultipleEvents,然后包含一个标准事件,以便在必要时超时之前取消操作。由于我必须处理超过 1024 个输入和输出套接字,因此我必须从 linux 上的选择更改为轮询。有没有办法取消在 Linux 下的轮询等待。我必须添加 remoe 连接,这将因轮询的等待超时而减慢速度。
使用 pipe()
创建一个伪内部事件,并将其读取端添加到poll()
列表中,使其成为第一个事件。
当您要取消投票时,将字符写入管道,poll()
将返回。 您将知道这是一个内部事件,因为它的索引为 0。
您甚至可以通过在管道中传递不同的值来使其成为一个粗糙的消息传递系统。
您可以使用手动事件对 Windows 代码执行相同的操作。
看看这个IoEvent
类就是这样做的。
相关文章:
- 当套接字连接断开时检测C/C++Unix
- 通过套接字[TCP]传输数据 如何在C / C ++中打包多个整数并使用send() recv()传输数据
- 如何通过套接字将文本文件的内容从服务器发送到客户端
- 如何在C/C++中用FD_set Unix设置套接字文件描述符
- 套接字读取后,我在缓冲区中看到意外输入
- 如何使用阻止套接字 API 添加消息发送操作 (smtp) 的进度?
- 无法对套接字执行操作,因为系统缺少足够的缓冲区空间或队列已满
- C/C++ 套接字:如果我在 IPv6 TCP 连接之前执行任何操作,则连接将失败
- 使用 CAsynSocket,如何捕获套接字操作的退出代码?
- 哪些 IO 操作会导致在使用套接字时将完成数据包发送到完成端口
- 套接字API:非套接字上的套接字操作
- 如何处理在同一套接字上发布多个操作的情况
- 取消套接字轮询操作
- 大规模套接字操作的分段故障
- 非套接字上的套接字操作,zmq选项
- Poco:如何从另一个线程中止阻塞套接字操作
- 多线程套接字操作与进度条更新
- Unix套接字:具有多个关联集的select()执行的操作超出了它应该执行的操作
- 来自 Boost::asio 套接字async_read_some操作的内存泄漏
- bind:对非套接字的套接字操作