[ruby-list:49246] Re: dRuby IPv6

From: Tanaka Akira <akr@...>
Date: 2013-03-02 15:19:40 UTC
List: ruby-list #49246
2013年3月2日 23:36 masa <masap.hat@gmail.com>:
>
> で、Mac OS Xの/etc/hostsが以下のようになっていたのですが、
>
>   127.0.0.1 localhost
>   255.255.255.255 broadcasthost
>   ::1             localhost
>   fe80::1%lo0  localhost
>
> このうちIPv6の設定を以下のようにコメントアウトすると、その現象は止まりました。

あぁ、getaddrinfo が複数のアドレスを返したとき、TCPServer.open は
それぞれのアドレスに対して順にサーバソケットを作って、
最初に成功したものを返します。

すでにソケットが作られているアドレスは失敗しますから、
アドレスを 3つ返すなら 3回成功するのでしょう。

まぁ、その TCPServer.open の挙動は正しくないんじゃないかという話はあって、
正しい挙動は 3つソケットを作ってすべて返すというものなのでしょうが、
TCPServer.open はひとつのソケットしか返せないので残念なことにそれは
かなり無理があります。

かわりに (TCPServer クラスじゃなくて Socket クラスになりますが)
Socket.tcp_server_sockets というメソッドがありますので、
そちらがお勧めです。

なお、複数のソケットが返されるので、当然、複数のソケットを扱う必要があります。
-- 
[田中 哲][たなか あきら][Tanaka Akira]

In This Thread