Re: unexpected extra pollout events from epoll
From: Robert Hancock
Date: Mon Oct 27 2008 - 01:59:28 EST
Paul P wrote:
Which version of epoll do you have? The epoll_wait()
function does not
accept an event mask (like you write above,
EPOLLIN|EPOLLOUT).
lol, I was a bit tired when I wrote that. Ok, ignore the stuff related
to epoll_wait in my previous post.
As optimization, if the EPOLLOUT bit is already set, you
don't need to
keep calling epoll_ctl(fd,MOD,EPOLLOUT).
This is good to know.
So, I've got a few questions about what happens to data that accumulates
while I am sending and the fd is set to EPOLLOUT? If I am send out a
large buffer and incoming data wants to stream in on a full duplex
connection, what happens to that data when I am processing the socket
while it is in epollout mode?
Is the following accurate? When data comes in while I am sending, I guess
the data fills up the receive buffers until they are full and then it
stops accepting data until it is cleared out? When I switch back to
EPOLLIN, I'm guessing that I will get a notification on that fd that there
is data waiting.
The other question I have is there a way to do full-duplex networking so
that I can receive network messages while I am sending or vice versa? It
seems that the method of switching the socket between EPOLLIN and EPOLLOUT
means that I can't do both operations simultaneously. Thanks
I don't quite follow. You shouldn't be switching back and forth if
you're trying to both send and receive, you can be registered for both
notifications at the same time and respond to whatever notifications
that you get. If you're not trying to write anything at the moment then
you shouldn't be registered for EPOLLOUT though, same for reading and
EPOLLIN.
--
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/