我在网上找到的关于嵌套 FD 行为的信息非常有限。
假设 EPOLL FD1 在 EPOLL FD2 和 FD3 之间共享。那么如果 epoll FD1 得到一个事件会发生什么
- 如果在没有 epoll_exclusive 标志的情况下添加它,是否会同时向 FD2 和 Fd3 引发事件。
- 收到事件后,是否需要在 FD1 上执行 epoll_wait 以清除事件。
以及嵌套epoll FD的用例是什么。
我在网上找到的关于嵌套 FD 行为的信息非常有限。
假设 EPOLL FD1 在 EPOLL FD2 和 FD3 之间共享。那么如果 epoll FD1 得到一个事件会发生什么
以及嵌套epoll FD的用例是什么。
对于电平触发的情况,它非常简单:
对于边缘触发的情况,我们希望 1 的答案保持不变,因为无论嵌套如何,如果将相同的 FD 添加EPOLLET
到两个 epoll 实例,它们都会报告每个事件一次。
我不知道第二个问题的答案应该是什么,但这没关系。在边缘触发模式下添加 epoll FD 时有一个 bug,它们总是表现得像电平触发,FD2 和 FD3 只要有未决事件,就会继续显示 FD1 是可读的。你可以看到这个关于试图修复它的线程,我认为它还没有在大陆上实现:
fs/epoll: fix the edge-triggered mode for nested epoll
which links to this GitHub repo which test a lot of different scenario, that你可能会觉得有趣。