边缘触发 epoll c

7
在触发边缘的 epoll 事件中,我会读取一个套接字(也可能是多个套接字),直到没有更多数据可读(EAGAINEWOULDBLOCK),然后循环回到 epoll_wait。如果在处理该读取时,另一个套接字(当前未被读取的套接字)变为可读状态,那么会发生什么?触发边缘的 epoll 会忽略它,因为它在触发/信号时不是在 epoll_wait 中阻塞,还是会在下一次调用 epoll_wait 时立即返回事件数组并包含该套接字吗?

2
如果可用的数据尚未被正在进行的读取操作读取,您应该会收到另一个事件。 - alk
好的,只是为了明确,我说的是另一个套接字变得可读,而不是已经被读取的那个,因此数据将不会被正在进行的读取所捕获(除非我做错了)! - jayjay
1个回答

4
这确实可行,epoll会在你调用epoll_wait之前发生的所有事件上操作,就好像这些事件在你调用时同时发生。epoll被设计成这样使用,所以不要担心这种使用方式。只要你处理了epoll_wait返回时已触发的所有事件,就不必担心任何在调用之间发生的事件,它们会在下次调用时被捕获。
基本上:你的使用方法很好,请继续保持 :)

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