IO :: Socket :: IP和Socket在perl 5.8.8上不起作用

时间:2012-07-18 18:14:01

标签: perl ipv6

我使用IO :: Socket :: IP页面上的代码进行了测试:

use strict;
use warnings;
use IO::Socket::IP -register;

 my $sock = IO::Socket->new(
    Domain    => PF_INET6,
    LocalHost => "::1",
    Listen    => 1,
 ) or die "Cannot create socket - $@\n";

 print "Created a socket of type " . ref($sock) . "\n";

我在perl 5.8.8机器上得到的输出是:

Cannot create socket - Address family for hostaname not supported

在使用perl 5.12.3的slackware机器上,它成功了。

因此,似乎将Socket.pm升级到最新版本还不足以在perl 5.8.8上启用ipv6支持。

2 个答案:

答案 0 :(得分:0)

我最好的想法是查看程序加载的模块文件列表(显式或无意义)。这段代码应该可以解决问题

use File::Spec;
print File::Spec->canonpath($_), "\n" for sort values %INC;

查看每个相关文件(显然您可以忽略strict.pm之类的内容)以确保您使用的文件正在被使用,并查看是否有任何您忽略的可能使用升级的内容。

答案 1 :(得分:0)

由于我已经对您之前粘贴中链接的错误进行了评论,因此根本不会编写HTTP::Server::Simple来处理IPv6。它有很多特定于IPv4的代码遍布整个地方。您无法通过安装其他模块来启用此功能。

一旦基本IPv6支持在Socket中工作,独立于HTTP::Server::Simple,您就可以在HTTP::Server::Simple中修复代码以支持IPv6。要明确这一点,这将涉及编辑lib/HTTP/Server/Simple.pm本身,并实际修复代码。删除特定于IPv4的部分并编写一些家庭自然代码;理想情况下使用IO::Socket::IP本身而不是原始Socket - 使用它当前拥有的代码。这将使其在未来更加标准和更好地得到支持。

再次总结一下 - 实际的代码需要在这里重写;没有多少单纯的模块安装就足够了。