68user's page 掲示板

Prev< No. 1660〜1662> Next  [最新発言に戻る] [過去ログ一覧]
No. 1660 # 68user 2001/01/25 (木) 18:52:18
>>1659 kaori
  - IPv6 環境が構築してあるか。ping6 コマンドを使って
      IPv6 で反応が返ってくるか (localhost 宛でもよい)。
  - perl が IPv6 に対応しているかどうか。perl-5.005_03 なら多分
      無理。5.6 か 5.7 で対応したかもしれません。Socket6 というのを
      使えば 5.005_03 でもいけるのかもしれませんが、僕は試したことが
      ありません。

それをクリアすれば、少しの例外を除いて基本的には書き方は同じです
(そうしないとソースレベルでの互換性が全くなくなるので)。例外と
いうのは gethostbyname の代わりに getaddrinfo を使うとか。

とりあえず perldoc Socket6 してみてください。サンプルの
ひとつでも載っているのではないでしょうか。

No. 1661 # 68user 2001/01/25 (木) 21:22:48
>>1660 68user
> 少しの例外を除いて基本的には書き方は同じです (そうしないと
> ソースレベルでの互換性が全くなくなるので)。例外というのは
> gethostbyname の代わりに getaddrinfo を使うとか。
あー激しく不正確だなぁ。gethostbyaddr で IPv6 なプログラムは
書けます。でも、AF_INET を AF_INET6 にしないといけないとか、
struct sockaddr_in を struct sockaddr_in6 にするだとか、
ソースレベルでの書き換えが必要になります。しかもそのように
書き換えると IPv4 では動きません。

そりゃまずいというわけで、IPv4 でも IPv6 でも同じ書き方が
できるような新しいライブラリが追加されました。getaddrinfo
という関数や AF_UNSPEC というアドレスファミリ (AF_INET とか
AF_INET6 とかを指定する必要がない) などなど。

というわけで、IPv6 only のプログラムは簡単に書けますが、
書いちゃいけません。IPv4/v6 両方で動くようなプログラムを
作るべきです。

あと、FreeBSD 4.1-RELEASE のデフォルト状態なら IPv6 対応の
はずですね。/etc/inetd.conf の
    #echo stream tcp6 nowait root internal
あたりを有効にして inetd を再起動して、それとお話しする
クライアントを書いてみるといいでしょう。

以上、IPv6 アプリを書いたことのない者 (IPv6 を使ったことさえ
ない) のたわごとでした。

No. 1662 # 68user 2001/01/25 (木) 21:47:20
しつこくて失礼。perl5.005_03 に Socket6 モジュールを入れてみました。

>>1660 68user
> とりあえず perldoc Socket6 してみてください。サンプルの
> ひとつでも載っているのではないでしょうか。
ばっちり載ってますね。これをちょいといじって
    % netstat -a | grep tcp6 | grep echo
    tcp6 0 0 *.echo *.* LISTEN
なサーバにつなげようとしたら、
    Can't load '/home/68user/p5-module/i386-freebsd/auto/Socket6/Socket6.so'
    for module Socket6: /home/68user/p5-module/i386-freebsd/auto/Socket6/Socket6.so:
    Undefined symbol "in6addr_any" at /usr/local/lib/perl5/5.00503/i386-freebsd/DynaLoader.pm
    line 169.
だそうで。原因究明はまた後日…と言いたいところだけれど、
こりゃ僕のレベルではいかんともしがたいですな。

Prev< No. 1660〜1662> Next  [最新発言に戻る] [過去ログ一覧]