Hi! When I use the following code to accept new conections, everything works:
use Socket; use IO::Socket::INET; our $LISTEN = new IO::Socket::INET LocalPort => 13327, Listen => 1, ReuseAddr => 1; Event->io (fd => $LISTEN, nice => 0, poll => 'r', data => 1, cb => sub { my ($fh, $peername) = $LISTEN->accept or return; }); However, when I change the nice => 0 by nice => 1, the program blocks in accept in about every 10th or so connect. strace -fepoll,accept shows this: [pid 18564] poll([{fd=8, events=POLLIN|POLLPRI, revents=POLLIN}, {fd=5, events=POLLIN|POLLPRI}, {fd=7, events=POLLIN|POLLPRI}], 3, 0) = 1 [pid 18564] accept(8, {sa_family=AF_INET, sin_port=htons(44238), sin_addr=inet_addr("10.0.0.1")}, [566935683088]) = 4 [pid 18564] poll([{fd=9, events=POLLIN|POLLPRI, revents=POLLIN}, {fd=8, events=POLLIN|POLLPRI}, {fd=5, events=POLLIN|POLLPRI}, {fd=7, events=POLLIN|POLLPRI}], 4, 0) = 1 [pid 18564] accept(8, As you can see, there is a single new connection, the handler gets called, accept()'s and everything is fine. On the next poll, the filehandle (fd 8) is NOT ready, but the handler _still_ gets callefd and naturally blocks in accept until a new conenction arrives, halting the program. This is dependent on nice => 1, with nice => 0, it works everytime. A quick guess of what might have happened (without looking at the code) is that Event somehow confuses the first and the second poll result: with nice => 0, fd 8 is always first in poll, with nice => 1, fd 8 sometimes gets moved intot he second slot, and everytime this happens, I get the problem. This is just a quick guess at whats happening. -- The choice of a -----==- _GNU_ ----==-- _ generation Marc Lehmann ---==---(_)__ __ ____ __ [EMAIL PROTECTED] --==---/ / _ \/ // /\ \/ / http://schmorp.de/ -=====/_/_//_/\_,_/ /_/\_\ XX11-RIPE