Re: (more) epoll troubles

From: Andrew Morton
Date: Wed Sep 03 2008 - 01:57:30 EST


On Sun, 31 Aug 2008 15:38:01 +0200 Michael Noisternig <mnoist@xxxxxxxxxxxxxx> wrote:

> Hello,
>
> and sorry again if this is the wrong place to ask (again, please hint to
> me to an appropriate place to ask in that case).
>
> After experimenting with epoll edge-triggered mode I am clueless why on
> a few occassions I seem to not get any input notification despite data
> is available.
>
> In detail: I have set up sockets with epoll events
> EPOLLET|EPOLLRDHUP|EPOLLIN. When I get EPOLLIN for a socket, I read() as
> long as I get what I asked for, i.e. whenever read() returns either
> EAGAIN or less data than I asked for I take this as indication that I
> must wait for another EPOLLIN notification. However, this does not seem
> to work always.
>
> Here is some log from my program:
>
> 0x9e6b8a8: read not avail (1460/2048 read)
> i.e. tried to read 2048 bytes, got 1460 -> assume must wait for EPOLLIN
> for more data to read
> (note that the fd is always in the epoll set with
> EPOLLET|EPOLLRDHUP|EPOLLIN)
>
> 0x9e6b8a8: read not avail (1460/2048 read)
> got EPOLLIN notification, read 1460 bytes again -> wait for another
> notification
>
> ...after a few minutes without any notification...
>
> 0x9e6b8a8: GOT RDHUP (2001:0/80002001:0)
> i.e. got notification for EPOLLRDHUP|EPOLLIN (2001), was waiting for
> EPOLLET|EPOLLRDHUP|EPOLLIN (80002001)
>
> 0x9e6b8a8: read not avail (342/2048 read)
> then on trying to read we find data in the buffer (???)
>
> 0x9e6b8a8: stored 16384 bytes
> this is the amount of data we expected to get /immediately/, i.e.
> without a minutes delay and rdhup
>
> Of course you might think that the other side sent the data only just
> before closing its side, but it is unlikely since we expected to get the
> 16384 bytes in one go (this is how that L7 protocol works), and I see
> this odd behaviour of missing input notifications now and then.
>
> Does anybody know/have an idea why I am missing EPOLLIN notifications?
>

If you can put together a little test case which others can run then we
should be able to get this resolved super-quick.

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