Re: unexpected extra pollout events from epoll

From: Davide Libenzi
Date: Sun Oct 26 2008 - 21:18:27 EST


On Sun, 26 Oct 2008, Paul P wrote:

> > You do that by writing data until it's finished, or you
> > get EAGAIN. If you
> > get EAGAIN, you listen for EPOLLOUT.
> > Reading is same, but you'd wait for EPOLLIN.
>
> I've got a few questions about this approach. The most logical
> way to do this seems to be:
>
> 1) Leave the epoll_wait with the EPOLLIN|EPOLLOUT event flags and
> use epoll_ctl to switch the interest mask for each fd between EPOLLIN
> and EPOLLOUT on a per fd basis.

Which version of epoll do you have? The epoll_wait() function does not
accept an event mask (like you write above, EPOLLIN|EPOLLOUT). It never
had.
But yes, you'd switch interest with epoll_ctl().



> 2) When I'm ready to write, I do a write and if it does not fully
> write and I get the EAGAIN flag, I switch the fd with epoll_ctl(fd,MOD,EPOLLOUT).

As optimization, if the EPOLLOUT bit is already set, you don't need to
keep calling epoll_ctl(fd,MOD,EPOLLOUT).



> However, I get strange behavior when I tried adding fd's with only the
> EPOLLIN interest mask. If I use epoll_wait with both the EPOLLIN and
> EPOLLOUT interest mask, but add fd's with only the EPOLLIN interest mask,
> I still seem to get EPOLLOUT events on the fd.

Again, how the heck do you "use epoll_wait with both the EPOLLIN and
EPOLLOUT"?!? There is not such a thing.




> So, I'm a little confused.

>From the wording above, that doesn't seem like a wrong guess.



- Davide


--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/