3

TCP/IPソケットを使用するPerl/Windowsアプリがあり、IPv6サポートを追加する必要があります。

ハリケーンエレクトリックトンネルでIPv6を実行しているWindows764ビットマシンがあり、http://test-ipv6.com/で10点満点で10点を獲得し、 http ://loopsofzenなどのIPv6のみのサイトにアクセスします。 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は今のところ失われた原因ですか?

4

3 に答える 3

0

そこで、Linux(Ubuntu)のコピーを古いラップトップに投げましたが、同じコードで問題なく動作します。

IPv6のサポートは存在するようですが、WindowsのActivePerlとStrawberryPerlでは壊れています。

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 の「エクスプレス」無料バージョンがいくつかあると思いますが、それらが商用バージョンと比較して何か不足しているかどうかはわかりません。

README と INSTALL ファイルを読むだけで、Perl のビルドにまったく問題はありませんでした。実際、Apache 2.2、mod_perl、およびソースから CPAN を使用/必要とするすべてのモジュールに対して同じことを行いました。同じ VS コマンド プロンプトから cpan や cpanm などを実行すると、モジュールが Win32 と互換性がある限り、すべてがうまくビルドされます (モジュールの 95% は互換性があります)。

関数「getaddrinfo」は私にとって完璧に機能します。

于 2012-08-10T00:58:09.467 に答える
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 に答える