Perl DNS查找提供了不正确的输出
这是我正在使用的代码。代码有什么问题? 此外,如何指定超时参数?tcp_超时似乎不起作用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
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调用中的&
。