嵌套EPOLL FD

3
我在网上找到的关于嵌套FD行为的信息非常有限。
假设EPOLL FD1被EPOLL FD2和FD3共享, 如果epoll FD1收到一个事件,会发生什么?
- 如果没有使用epoll_exclusive标志,则它会同时向FD2和Fd3触发事件吗? - 在收到事件后,我需要对FD1执行epoll_wait以清除事件吗?
嵌套的epoll FD有哪些用例?
1个回答

2
对于水平触发的情况,很简单:
  1. 是的,您可以结合epoll(7)手册中Q&A部分的Q2和Q3的答案:
    A2:如果将相同的文件描述符添加到两个epoll实例中,则事件将报告给它们两个。
    A3:如果epoll文件描述符有等待的事件,则它将指示为可读。
  2. 否,因为清除事件仅与边缘触发的epoll相关。
对于边缘触发的情况,我们期望问题1的答案保持不变,因为无论嵌套如何,如果使用 EPOLLET 将相同的FD添加到两个epoll实例中,它们都会报告每个事件一次。
我不知道第二个问题的答案应该是什么,但这并不重要。在以边缘触发的方式添加epoll FD时存在错误,它们总是像水平触发的方式一样运行,只要FD1有待处理事件,FD2和FD3将继续显示FD1可读。 您可以查看此线程,尝试修复它,我认为它还没有到达大陆: fs / epoll:修复嵌套epoll的边缘触发模式
其中链接到这个GitHub repo,它测试了许多不同的场景,您可能会感兴趣。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接