Perl DNS查找提供了不正确的输出

Perl DNS查找提供了不正确的输出,perl,dns,Perl,Dns,这是我正在使用的代码。代码有什么问题? 此外,如何指定超时参数?tcp_超时似乎不起作用 sub resolve_dns() { my $dns = $_[0]; my $res = Net::DNS::Resolver->new( nameservers => [qw(24.116.197.232)], recurse => 0, debug

这是我正在使用的代码。代码有什么问题? 此外,如何指定超时参数?tcp_超时似乎不起作用

sub resolve_dns()
{
    my $dns = $_[0];
    my $res   = Net::DNS::Resolver->new(

                nameservers => [qw(24.116.197.232)],
                recurse     => 0,
                debug       => 1,
                tcp_timeout => 3
                );
    my $query = $res->search($dns);

    if ($query) {
        foreach my $rr ($query->answer) {
            next unless $rr->type eq "A";
            print $rr->address, "\n";
        }
    } else {
        warn "query failed: ", $res->errorstring, "\n";
    }
}
这是我得到的输出

Output

query failed: query timed out
;; search(www.youtube.com)
;; setting up an AF_INET() family type UDP socket
;; send_udp(24.116.197.232:53)
;; send_udp(24.116.197.232:53)
;; send_udp(24.116.197.232:53)
;; send_udp(24.116.197.232:53)

可以使用以下命令指定超时:

$res->udp_timeout(3);

或者,替换构造函数并在构造函数中指定它。

@Brian,这就是名称服务器的问题所在吗?如果我不指定名称服务器,它就可以正常工作。我怀疑是这样的。您可以通过在命令行上使用nslookup或dig进行验证。对我来说,它当然过时了。(完全正确-如果您使用的是默认名称服务器,它可以工作…因此,不是代码问题)您能告诉我如何指定超时参数吗。如果名称服务器要超时,我不希望在该服务器上等待超过3秒。请把它作为答案,我可以接受。@cppcoder,我可以在你的代码中看到另外两个bug。首先,您告诉Perl该子函数不接受任何参数(
sub-resolve\u-dns()
),但它只接受一个参数(
my$dns=$\u0];
)。这意味着您不仅拥有一个错误的原型,而且还(通过使用
&
)无理由地特别重写if。去掉sub声明中的
()
,并去掉sub调用中的
&