Re: unexpected extra pollout events from epoll

From: Paul P
Date: Sun Oct 26 2008 - 20:59:07 EST


> 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.

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).

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.

Am I supposed to change the main loop with epoll_wait so that when one
socket is reading that I switch the main loop to get EPOLLOUT events?
That means that I'm not receiving on any fd while I'm sending, so this
probably isn't right.

So, I'm a little confused.

Thanks in advance.

Paul




--
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/