先来纠正一下观念。
epoll 是区分读写事件,这主要取决于底层驱动的支付。
如:
struct epoll_event ee;
ee.events= EPOLLIN | EPOLLOUT;
epoll_ctl( epfd, EPOLL_CTL_MOD, fd, &ee );
等来事件可读的时候
epoll_wait 返回的 ee.events 就会是 EPOLLIN
可写的时候是EPOLLOUT;
其实这个在底层很简单:
revents = epi->ffd.file->f_op->poll(epi->ffd.file, NULL) & epi->event.events;
将poll返回的 mask与 event.events 取与。

本文深入解析了epoll机制中如何区分读写事件,通过底层驱动实现,详细阐述了epoll_wait返回事件类型EPOLLIN和EPOLLOUT的原理,以及其实现过程中的关键代码片段。
1579

被折叠的 条评论
为什么被折叠?



