嵌套EPOLL FD

问题描述 投票:2回答:1

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

假设EPOLL FD1在EPOLL FD2和FD3之间共享。那么,如果epoll FD1收到事件会怎样?

  1. 如果添加时没有epoll_exclusive标志,是否会同时向FD2和Fd3引发事件。
  2. 获得事件后,我是否需要在FD1上执行epoll_wait才能清除事件。

以及嵌套epoll FD的用例是什么?

linux filesystems epoll userspace epollet
1个回答
0
投票

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

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

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

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

© www.soinside.com 2019 - 2024. All rights reserved.