in reply to How do I do a non-blocking accept?
So a non-blocking accept IS NEVER REQUIRED because you can either
So instead of
you just do doforeach (@Listeners){ vec($rout,fileno($_),1) or next; # listener is nonblocking, goes until # expected accept failure while (accept(my $NewServer, $_)){ push @Clients, $NewServer
Or, mock up the accept-em-all-NOW method without clumsily making accept fail:foreach (@Listeners){ vec($rout,fileno($_),1) or next; # listener is blocking, but we # know this listener is hot if (accept(my $NewServer, $_)){ push @Clients, $NewServer }else{ log "accept: $!" }
foreach (@Listeners){ vec($rout,fileno($_),1) or next; # listener is blocking, but we # know this listener is hot acc: accept(my $NewServer, $_) and push @Clients, $NewServer; # select again to see if there's another my $rvec; vec($rvec,fileno($_),1) = 1; select($rvec,undef,undef,0); vec($rvec,fileno($_),1) and goto acc;
How much can it affect throughput? It's like asking is it better for an office building to have a one-person revolving door that spins fast or a family-size one that spins slow.
|
|---|