3

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

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

它有 ActivePerl 5.14.2(我也试过草莓 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 暂时还是一个失败的原因?

4

3 回答 3

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

于 2012-07-05T16:23:13.890 回答
0

因此,我将 Linux (Ubuntu) 的副本扔到一台旧笔记本电脑上,同样的代码也能正常工作。

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

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

于 2012-07-06T14:38:27.980 回答
0

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

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

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

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

“getaddrinfo”功能对我来说非常有效。

于 2012-08-10T00:58:09.467 回答