DNS查询给出错误输出

问题描述:

这是我正在使用的代码。代码有什么问题? 此外,我怎样才能指定超时参数? tcp_timeout似乎不起作用。DNS查询给出错误输出

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) 
+0

我会说这是......超时。 – 2012-04-11 14:11:27

+0

@Brian,这是名称服务器的问题吗?如果我不指定名称服务器,它工作正常。 – cppcoder 2012-04-11 14:12:11

+0

我会怀疑的。您可以通过在nslookup或dig上的命令行上进行验证。它当然适合我。 (确切地说 - 如果你使用默认的域名服务器,它可以工作...因此,不是代码问题) – 2012-04-11 14:14:04

可以使用指定超时:

$res->udp_timeout(3); 

,或者更换在构造函数中指定。