perl windows IPv6

时间:2012-07-05 16:00:57

标签: windows perl ipv6

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

我有一台运行带有Hurricane Electric隧道的IPv6的Windows 7 64位计算机,它在http://test-ipv6.com/上获得10分10,并且将访问仅限IPv6的网站,例如http://loopsofzen.co.uk/

它有ActivePerl 5.14.2(我也尝试过Strawberry Perl 5.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目前仍然是一个失败的原因?

3 个答案:

答案 0 :(得分:0)

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位,因为相同的代码适用于我。

答案 1 :(得分:0)

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

似乎存在IPv6支持,但在Windows上的ActivePerl和Strawberry Perl中已经破坏了。

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

答案 2 :(得分:0)

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

我是使用VC10(Microsoft Visual Studio 2010)使用“Visual Studio x64 Win64命令提示符(2010)”完成的。它基本上是常规的命令提示符,但是为x64版本准备了所有环境。

我认为Visual Studio有一些“快速”免费版本,但我不知道那些与商业版本相比缺乏什么。

我在构建Perl时遇到了麻烦,只需阅读README和INSTALL文件即可。我实际上对Apache 2.2,mod_perl以及我从CPAN使用/需要的所有模块做了同样的事情。如果从同一VS命令提示符运行cpan和cpanm之类的东西,只要模块与Win32兼容(95%的模块兼容),一切都会很好。

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