IO-SocketAlarm
view release on metacpan or search on metacpan
t/20-detect-event-eof.t view on Meta::CPAN
return \@got_alarm;
}
socketpair(my $s1, my $s2, AF_UNIX, SOCK_STREAM, 0);
is( collect_alarms($s1,$s2), ['ontime'], 'UNIX alarms' );
# repeat the test for TCP sockets
($s1, $s2)= tcp_socketpair;
is( collect_alarms($s1,$s2), ['ontime'], 'TCP alarms' );
# Set up a cascade of shutdowns
{
my @got_alarm;
local $SIG{ALRM}= sub { note "Got alarm early"; push @got_alarm, 'early' };
($s1, $s2)= tcp_socketpair;
my @seq= ( $s1, $s2, socketalarm($s2) );
for (1..9) {
($s1, $s2)= tcp_socketpair;
push @seq, $s1, $s2, socketalarm($s2, [ shut_w => $seq[-3] ]);
}
sleep .1;
$SIG{ALRM}= sub { note "Got alarm"; push @got_alarm, 'ontime' };
ok( !$seq[-1]->triggered, 'not triggered yet' ) or note "cur_action = ".$seq[-1]->cur_action;
# shutdown the final socket, triggering a chain reaction of shutdowns, and finally the signal
shutdown($seq[-3], SHUT_WR);
sleep 10; # sleep will get interrupted
ok( $seq[-1]->triggered, 'triggered' );
ok( $seq[-1]->finished, 'finished' );
is( \@got_alarm, ['ontime'], 'cascade ending with alarm' );
}
my $tcp_listen;
sub tcp_socketpair {
unless ($tcp_listen) {
socket $tcp_listen, AF_INET, SOCK_STREAM, 0
or die "socket: $!";
$tcp_listen->blocking(0);
listen $tcp_listen, 10
or die "listen: $!";
( run in 0.459 second using v1.01-cache-2.11-cpan-49f99fa48dc )