关于Linux epoll的疑问
对于如下代码:
struct epoll_event events[MAX_EVENTS];
nfds = epoll_wait(epoll_fd, events, MAX_EVENTS, -1);
返回的events数组里是否会出现重复的文件描述符?
或者说,是否存在 i, j 满足以下条件:
(1) 0 <= i, j < nfds 并且 i 不等于 j
(2) events[i] 和 events[j] 的文件描述符相同
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(12)
http://www.pagefault.info/?p=46
我之前对stale event的理解似乎有些偏差,stale event应该是指在处理某个fd的事件的时候关闭了另外一个fd,而不是关闭了当前这个fd
我以你说的stale event为关键词,搜索到了这篇文章,不知道对你有没有帮助
对于这句 “When successful, epoll_wait() returns the number of file descriptors ready for the requested I/O”,我觉得既然返回值是fd的数量,那么fd在events数组里应该不会重复,否则就意味着同一个fd被当成两个或更多个fd
返回多少个fd与分开通知并不矛盾吧
同一个文件描述符上的的两个事件,还是两个事件,并不会成为一个事件。所以,会出现。楼主你考虑下你自己设计epoll接口会将同文件上的多个事件合并成一个吗?epoll中的那段话的意思是:在epoll_wait中,如果有多个事件出现,那么他们会一起被返回,被report,而并不需要多次epoll_wait调用。
在epoll_wait循环中,如果某fd在事件处理中关闭,应当通过对与该fd关联的private data来进行标记,而不是直接关闭掉吧
同一个文件描述符上的的两个事件,还是两个事件,并不会成为一个事件。所以,会出现。楼主你考虑下你自己设计epoll接口会将同文件上的多个事件合并成一个吗?epoll中的那段话的意思是:在epoll_wait中,如果有多个事件出现,那么他们会一起被返回,被report,而并不需要多次epoll_wait调用。
在epoll_wait循环中,如果某fd在事件处理中关闭,应当通过对与该fd关联的private data来进行标记,而不是直接关闭掉吧
epoll 手册页中有这样一段,一直不能理解:
Q7 If more than one event occurs between epoll_wait(2) calls, are they combined or reported separately?
A7 They will be combined.
这个,你是指相同的文件描述符上有不同的通知事件么?
这个,你是指相同的文件描述符上有不同的通知事件么?