嵌套EPOLL FD

时间:2018-04-30 05:39:12

标签: linux filesystems epoll userspace epollet

我在网上发现有关嵌套FD行为的信息非常有限。

假设EPOLL FD1在EPOLL FD2和FD3之间共享。那么如果epoll FD1获得一个事件会发生什么

  1. 如果在没有epoll_exclusive标志的情况下添加事件,是否会向FD2和Fd3引发事件。
  2. 获得活动后,我是否需要在FD1上执行epoll_wait以清除事件。
  3. 嵌套epoll FD的用例是什么?

1 个答案:

答案 0 :(得分:0)

对于级别触发的情况,这非常简单:

  1. 是的,您可以在epoll(7)手册页中的“问答”部分结合对第二季度和第三季度的答案:
    A2:如果将相同的文件描述符添加到两个epoll实例,则事件将报告给它们两个。
    A3:如果epoll文件描述符中有等待事件,则表明它是可读的。
  2. 否,因为清除事件仅与边缘触发的epoll有关。

对于边缘触发的情况,我们希望对1的答案保持不变,因为无论嵌套如何,如果在两个epoll实例中添加EPOLLET相同的FD,它们都会报告一次每个事件

我不知道第二个问题应该的答案是什么,但这并不重要。在边缘触发模式下添加epoll FD时存在一个错误,它们总是始终像级别触发一样,FD2和FD3会继续显示FD1,只要它有未决事件即可读取。 您可以看到有关尝试修复它的线程,我认为这还没有解决到大陆: fs/epoll: fix the edge-triggered mode for nested epoll
链接到此GitHub repo的网站,该网站测试了很多您可能会感兴趣的场景。