首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >perl windows IPv6

perl windows IPv6
EN

Stack Overflow用户
提问于 2012-07-06 00:00:57
回答 3查看 364关注 0票数 3

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

我有一台Windows764位计算机,它运行的是带有飓风电气隧道的IPv6,它在http://test-ipv6.com/上得了10分(满分10分),并且将访问http://loopsofzen.co.uk/等仅支持IPV6的站点。

它有ActivePerl 5.14.2 (我也尝试过Strawberry Perl 5.16.0.1)。

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

代码语言:javascript
复制
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;

这就产生了这个错误:

代码语言:javascript
复制
no address associated with nodename at ip.pl line 6.

(新的) getaddrinfo()函数似乎可用,如果我将$host设置为使用IPv4主机名,它确实可以工作。但是IPv6似乎根本不起作用。

我遗漏了什么?或者,Perl/Windows/IPv6暂时还会失败吗?

EN

回答 3

Stack Overflow用户

发布于 2012-07-06 00:23:14

代码语言:javascript
复制
$ 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的问题,因为同样的代码也适用于我。

票数 0
EN

Stack Overflow用户

发布于 2012-07-06 22:38:28

所以我把Linux (Ubuntu)的副本扔到了一台旧笔记本电脑上,同样的代码也运行得很好。

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

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

票数 0
EN

Stack Overflow用户

发布于 2012-08-10 08:58:09

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

我使用"Visual Studio x64 Win64命令提示符( 2010)“在VC10 (Microsoft Visual Studio2010)上做到了这一点。它基本上是常规的命令提示符,但包含了为x64构建准备的所有环境。

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

构建Perl确实没有问题,只需阅读自述文件和安装文件即可。实际上,我对Apache2.2、mod_perl和所有我使用/需要的模块都做了同样的事情。如果您从相同的VS命令提示符运行cpan和cpanm之类的命令,那么只要模块与Win32兼容(95%的模块都是兼容的),一切都会构建得很好。

函数"getaddrinfo“非常适合我。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11348206

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档