epoll 事件处理的细节分析

先来纠正一下观念。

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,事件处理)