sub _resolve { my ($self, $host, $request, ...) = @_; my $res = $self->resolver; # from Net::DNS::Resolver ... my $sock = $res->bgsend($host) # bgsend from Net::DNS::Resolver or die "No sock from bgsend"; my $rin = ''; vec($rin, fileno($sock), 1) = 1; my $nf = select($rin, undef, undef, $self->_time_remain($request)); # _time_remain is the clock for the request die "DNS lookup timeout" unless $nf; my $packet = $res->bgread($sock) # bgread from Net::DNS::Resolver or die "DNS bgread failure"; ...