my $index = $#noreply +1;
push @noreply, $obj = HTTP_Request->new($ip, $packet, sub {
delete $noreply[$index];
..............
});
..............
..............
my $check_time = time();
my $timeout = 30;
while (1) {
$poll->poll(5);
for my $sock ( $poll->handles( POLLHUP | POLLERR | POLLNVAL )) {
$sock->error();
}
for my $sock ( $poll->handles(POLLIN) ) {
$sock->recv();
}
for my $sock ($poll->handles(POLLOUT)) {
$sock->send();
}
if (time > ($check_time + $timeout)) {
$check_time = time;
my $i;
foreach (@noreply) {
if ($_ && $_->ttl < $check_time) {
delete $noreply[$i];
$_->close;
}
++$i;
}
}
}
Maybe someone has a more elegant solution? |