1

我对 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 支持。

4

2 回答 2

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使用代码。这将使其在未来更加标准和更好的支持。

再次总结——实际代码需要在这里重写;仅仅安装模块是不够的。

于 2012-07-19T14:31:52.490 回答
0

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

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

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

于 2012-07-18T21:33:33.487 回答