Messages in this thread | | | Date | Sun, 26 Oct 2008 17:58:49 -0700 (PDT) | From | Paul P <> | Subject | Re: unexpected extra pollout events from epoll |
| |
> 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
| |