From: Tanaka Akira Date: 2013-03-03T00:19:40+09:00 Subject: [ruby-list:49246] Re: dRuby IPv6 2013年3月2日 23:36 masa : > > で、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]