同一个FD应该如何使用epoll读写

How should I use epoll to read and write from the same FD

环境

用例

示例流程

  1. 设置套接字(EPOLL_CTL_ADD)
  2. 开始阅读(EPOLL_CTL_MOD + EPOLLIN | EPOLLONESHOT)
  3. 等待数据读取时
    • [a] 写入一些数据 (EPOLL_CTL_MOD + EPOLLOUT | EPOLLONESHOT)

问题描述

上述问题的可能解决方法

这就是我想弄清楚的:

有什么方法可以同步普通FD上的Read/Write IO操作w/o需要通过epoll_wait线程同步?有没有办法直接调用EPOLL_CTL_MODw/o重置之前的状态?在已经设置了 EPOLLIN 的 FD 上是否有任何 线程安全方式 添加 EPOLLOUT

SOoo...,正如@Hasturkun 所建议的那样,使用 dup 来过滤 EPOLLIN 和 EPOLLOUT 事件(以线程安全的方式)做到了这一点,但是,对我来说,这看起来更像是 hack / 解决方法...我发现没有更优雅的解决方案很尴尬...windows IOCompletion 端口对我来说似乎更优雅...