perl windows IPv6

perl windows IPv6,windows,perl,ipv6,Windows,Perl,Ipv6,我有一个使用TCP/IP套接字的Perl/Windows应用程序,我需要添加IPv6支持 我有一台Windows 7 64位计算机,它运行IPv6,带有飓风电力隧道,在10分中得了10分,将访问仅限IPv6的站点,例如 它有ActivePerl5.14.2(我还尝试了草莓Perl5.16.0.1) 下面是一个简单的测试脚本: use Socket qw( getaddrinfo ); $host = 'loopsofzen.co.uk'; $port = 80; $hints = (sockty

我有一个使用TCP/IP套接字的Perl/Windows应用程序,我需要添加IPv6支持

我有一台Windows 7 64位计算机,它运行IPv6,带有飓风电力隧道,在10分中得了10分,将访问仅限IPv6的站点,例如

它有ActivePerl5.14.2(我还尝试了草莓Perl5.16.0.1)

下面是一个简单的测试脚本:

use Socket qw( getaddrinfo );
$host = 'loopsofzen.co.uk';
$port = 80;
$hints = (socktype => SOCK_STREAM, family -> Socket::AF_INET6);
($err, @addrs) = getaddrinfo($host, 0);
die $err if $err;
这就产生了错误:

no address associated with nodename at ip.pl line 6.
(新的)
getaddrinfo()
函数似乎可用,如果我将
$host
设置为使用IPv4主机名,它确实可以工作。但IPv6似乎根本不起作用

我错过了什么?或者Perl/Windows/IPv6暂时还是一个失败的原因吗?

下面的“适合我”在OSX上可以成功地
ping-6 loopsofzen.co.uk

$ perl -lE'use Socket qw( getaddrinfo );
   ($err, @addrs) = getaddrinfo(q{loopsofzen.co.uk}, 0);
   die $err if $err; print map { "@{[ %$_ ]}" } @addrs;'
protocol 17 canonname  addr ?? socktype 2 family 30protocol 6 canonname  addr ?? socktype 1 family 30

我认为你的问题不在于Perl,因为同样的代码对我有效。

所以我把Linux(Ubuntu)的一个副本扔到一台旧笔记本电脑上,同样的代码可以正常工作

似乎IPv6支持已经存在,但在Windows上的ActivePerl和草莓Perl中已经中断


有人建议,用于生成Windows版本的编译器头和库尚未针对IPv6进行更新。希望这会在适当的时候得到解决。同时,我可以继续在Linux上开发。

您可以在Windows上从源代码编译自己的Perl 5.16

我使用VC10(MicrosoftVisualStudio2010)通过“VisualStudioX64 Win64命令提示符(2010)”实现了这一点。它基本上是常规的命令提示符,但所有环境都为x64构建做好了准备

我认为有一些Visual Studio的“快速”免费版本,但我不知道这些版本与商业版本相比是否缺少一些东西

构建Perl真的没有问题,只需阅读自述文件并安装文件。实际上,我对Apache2.2、mod_perl和我从源代码使用/需要的CPAN的所有模块都做了相同的操作。如果您在同一VS命令提示符下运行cpan和cpanm之类的东西,那么只要模块与Win32兼容(95%的模块兼容),一切都会构建得很好


“getaddrinfo”功能对我来说非常适用。

谢谢。是的,我可以在这里点击loopsofzen.co.uk好的。我认为问题很可能存在于ActiveState(和草莓Perl)Windows Perl版本中。您最初的问题有很多错误。您定义了“$hints”,但不在任何地方使用它。将其初始化为键/值列表,即使它是标量。您似乎没有使用“strict”,因为这些变量都没有声明。您可以编辑代码,或者用一些实际的合理代码重新询问吗?