We shouldn't go through the file descriptors if select(2) failed: the
table is likely to be bobbins.
sub accept_loop () {
my $rfd_in = "";
for my $fd (keys %SERVMAP) { vec($rfd_in, $fd, 1) = 1; }
sub accept_loop () {
my $rfd_in = "";
for my $fd (keys %SERVMAP) { vec($rfd_in, $fd, 1) = 1; }
my ($n, $t) = select my $rfd_out = $rfd_in, undef, undef, undef;
my ($n, $t) = select my $rfd_out = $rfd_in, undef, undef, undef;
- $n >= 0 || $! == EINTR or sysfail "select failed: $!";
+ if ($n >= 0) { }
+ elsif ($! == EINTR) { next SELECT; }
+ else { sysfail "select failed: $!"; }
FD: for my $fd (keys %SERVMAP) {
next unless vec $rfd_out, $fd, 1;
my ($s, $a, $sk) = @{$SERVMAP{$fd}};
FD: for my $fd (keys %SERVMAP) {
next unless vec $rfd_out, $fd, 1;
my ($s, $a, $sk) = @{$SERVMAP{$fd}};