Skip to contentSkip to conversation

problem with rt-sigio: lost events

DISCUSSION Felix von Leitner 1 participant 1 message Dec 26, 2002

lore
Share & tools
lore
#0 lore raw

Folks,

I am having trouble with sigio. I tried to integrate it in a event notification framework of mine that already speaks poll and epoll. I want sigio for backwards compatibility with 2.4 kernels.

So I used the description from Dan's C10k web site and got it working. My test application is a trivial web server for static web pages only.

My first problem is that sigio will not signal POLLOUT on freshly connected connections. It doesn't change when I read the HTTP header. So I added a kludge that calls poll() when the application wants to switch from reading to writing or vice versa. That is quite ugly but it works.

The second problem is that once I start hammering the server with request (as opposed to running wget manually from the command line), the server just stops serving requests. strace shows this pattern:

sigtimedwait signals an event on fd #3 (the listening socket) accept is called, returns #4
fd 4 is set non-blocking
F_SETOWN, F_SETSIG, SETFL O_ASYNC
sigtimedwait times out.
sigtimedwait is called again, times out again.

Why is that? Googling seemed to indicate that there could be a race condition here after the accept. Should I be running poll on the socket right away? Or just blindly call the read handler?

Is anyone actually successfully using sigio for anything? So far it does not look very reliable to me.

Felix