use strict;
use warnings;
use IO::Select qw( );
use IO::Socket qw( );
my $lsn = IO::Socket::INET->new(Listen => 1, LocalPort => 8080);
my $sel = IO::Select->new( $lsn );
my $no_error = my ($r_ready, $w_ready, $e_ready) =
IO::Select->select($sel, undef, undef, 2.2);
if ($no_error) {
print("No error\n");
print("Num readers ready: ", 0+@$r_ready, "\n");
print("Num writers ready: ", 0+@$w_ready, "\n");
print("Num errors ready: ", 0+@$e_ready, "\n");
} else {
print("Error ", 0+$!, ": $!\n");
}
####
Win>perl a.pl
Error 0:
linux$ perl a.pl
Error 29: Illegal seek
####
use strict;
use warnings;
use IO::Socket qw( );
my $lsn = IO::Socket::INET->new(Listen => 1, LocalPort => 8080);
my $r_in = my $w_in = my $e_in = '';
vec($r_in, fileno($lsn), 1) = 1;
vec($r_in, 100, 1) = 1 if $ARGV[0];
my $nfound = select(
my $r_ready = $r_in,
my $w_ready = $w_in,
my $e_ready = $e_in,
2.2,
);
$nfound >= 0
or die("select: (" . (0+$^E) . ") $^E\n");
if ($nfound) {
print("nfound = $nfound\n");
} else {
print("Timeout\n");
}
####
Win>perl a.pl 0
Timeout
Win>perl a.pl 1
select: (10038) Unknown error
Using $^E instead of $! gives
select: (10038) An operation was attempted on
something that is not a socket
linux$ perl a.pl 0
Timeout
linux$ perl a.pl 1
select: (9) Bad file descriptor
####
- if(select($rb,$wb,$eb,$t) > 0)
+ if(select($rb,$wb,$eb,$t) >= 0)
####
use strict;
use warnings;
use IO::Select qw( );
use IO::Socket qw( );
my $lsn = IO::Socket::INET->new(Listen => 1, LocalPort => 8080);
my $sel = IO::Select->new( $lsn );
my ($r_ready, $w_ready, $e_ready) =
IO::Select->select($sel, undef, undef, 2.2)
or die("Can't select: (" . (0+$!) . ") $!\n");
if (@$r_ready + @$w_ready + @$e_ready == 0) {
print("Timeout\n");
} else {
print("Num readers ready: ", 0+@$r_ready, "\n");
print("Num writers ready: ", 0+@$w_ready, "\n");
print("Num errors ready: ", 0+@$e_ready, "\n");
}