Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
IO::Socket::IP和Socket don';t使用perl 5.8.8_Perl_Ipv6 - Fatal编程技术网

IO::Socket::IP和Socket don';t使用perl 5.8.8

IO::Socket::IP和Socket don';t使用perl 5.8.8,perl,ipv6,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 "C

我使用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机器上得到的输出是:

无法创建套接字-不支持主机名的地址系列

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


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

我的最佳想法是查看程序已加载的模块文件列表(显式或隐式)。这段代码应该可以做到这一点

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

查看每个相关文件(显然,您可以忽略像
strict.pm
)这样的内容,以确保您更新的文件正在使用中,并查看是否有任何您忽略的内容需要升级。

正如我已经对上一次粘贴中链接的错误发表了评论一样,
HTTP::Server::Simple
不是为处理IPv6而编写的。它到处都是IPv4特定的代码。您不能仅通过安装其他模块来启用此功能

一旦基本IPv6支持在
Socket
中独立于
HTTP::Server::Simple
,就可以着手修复
HTTP::Server::Simple
中的代码以支持IPv6。这里需要说明的是,这将涉及编辑
lib/HTTP/Server/Simple.pm本身,并实际修复代码。删除IPv4特定部分并编写一些家庭网络代码;理想情况下使用
IO::Socket::IP
本身,而不是原始的
Socket
——使用它当前拥有的代码。这将使它在未来更标准、更受支持


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

HTTP::AppServer
使用使用核心
Socket
模块的
HTTP::Server::Simple
。因此,IPv6只能与具有IPv6功能的
套接字
模块的perl版本一起使用。你使用的是哪个版本的
Socket
?Zagorax:破解它以使其正常工作是一种错误的方式,可能会给你留下许多模糊的bug。要升级到Perl v5.10,你什么都做不了吗?@mugenkenichi,正如我所说,我安装了最新的套接字模块,它的版本是2.002。而且
Socket
在你的5.8.8机器上独立使用IPv6吗?@Borodin,不幸的是没有。我在谷歌代码之夏为欧洲核子研究所做这项工作。他们的虚拟机运行的是基于RHEL 5(安装了perl 5.8.8)的Scientific Linux 5。他们有数百台虚拟机,不太可能在所有虚拟机上升级perl核心模块…:(非常感谢。我明天就要走了,回来后我会试试你的解决方案。您好,我很确定您是Socket.pm的开发人员,但是HTTP::Server::Simple的最新版本完美地处理了带有perl 5.12.3的ipv6,所以为什么不可能手动升级一些perl 5.8.8模块以使其工作呢?可能是正确的问题是:我用IO:Socket:IP进行的测试表明Socket.pm单机版不能与perl 5.8.8一起工作……我如何使它工作?哦,我明白了,我不知道更新的
HTTP::Server::Simple
可以管理它。在这种情况下,这更有趣。LeoNerd,因为我还没有找到解决方案,所以我将整个问题改为更具体的问题这个问题。