Messages in this thread | | | Date | Wed, 26 Apr 2006 14:55:57 -0600 | From | kyle@pbx ... | Subject | accept()ing socket connections with level triggered epoll |
| |
Hello,
I think I may have found a bug in Linux's implementation of epoll. My program creates a server socket that listens for incoming SOCK_STREAM connections. It uses epoll to wait for notification of a new connection (and also to handle the client sockets). While the client sockets use edge triggered epoll, for performance reasons, the server socket uses level triggered epoll.
I have found that when I open connections to my program very quickly, it is sometimes possible to call accept more than once before reaching the point where no more connections are available and EAGAIN is returned. If I return to epoll_wait without accepting all of the available connections, I should immediately be notified that a read is still available on the server socket, since I am using level triggered epoll for that descriptor (at least that is my understanding of how all of this is supposed to work ;). However, epoll does not make this notification. Even if the program accepts further incoming connections, the missed connection is never accepted, and eventually times out on the client side.
Kernel version is 2.6.9. I can provide test code if needed.
Thanks, Kyle Cronan <kyle@pbx.org> - To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
| |