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; } } }