【问题标题】:perl windows IPv6perl windows IPv6
【发布时间】:2012-07-06 02:04:18
【问题描述】:

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

我有一台运行 IPv6 的 Windows 7 64 位计算机,它带有 Hurricane Electric 隧道,它在 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 暂时还是一个失败的原因?

【问题讨论】:

  • 你原来的问题有很多问题。您定义了 '$hints' 但不要在任何地方使用它。您将其初始化为键/值列表,即使它是标量。您似乎没有使用“严格”,因为这些变量都没有声明。您可以编辑代码,或者用一些实际的合理代码重新询问吗?

标签: windows perl ipv6


【解决方案1】:

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

【讨论】:

  • 谢谢。是的,我可以在这里 ping loopsofzen.co.uk。我认为问题很可能在于 ActiveState(和 Strawberry Perl)Windows Perl 构建。
【解决方案2】:

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

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

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

【讨论】:

    【解决方案3】:

    您可以在 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-07-30
      • 1970-01-01
      • 2011-06-15
      • 2014-08-25
      • 1970-01-01
      • 1970-01-01
      • 2011-08-03
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多