我有一个(据我所知)完美运行的 Linux 设置(Ubuntu 8.04),其中所有工具(nslookup、curl、wget、firefox 等)都能够解析地址。然而,以下代码失败:
$s = new IO::Socket::INET(
PeerAddr => 'stackoverflow.com',
PeerPort => 80,
Proto => 'tcp',
);
die "Error: $!\n" unless $s;
我验证了以下几点:
Perl 能够使用 gethostbyname 解析地址(即下面的代码有效):
my $ret = gethostbyname('stackoverflow.com'); print inet_ntoa($ret);
原始源代码在Windows下工作
- 这就是它应该如何工作(即它应该解析主机名),因为 LWP 试图使用这种行为(事实上,我通过尝试调试为什么 LWP 不为我工作而偶然发现了这个问题)
- 运行脚本不会发出 DNS 请求(因此它甚至不会尝试解析名称)。通过 Wireshark 验证