From: Yukihiro Matsumoto <matz@...>
Date: 2009-01-06T17:14:43+09:00
Subject: [ruby-dev:37706] Re: [Bug:trunk] Socket.getaddrinfo("www.ruby-lang.org", 80) returns only UDP information

まつもと ゆきひろです

In message "Re: [ruby-dev:37674] [Bug:trunk] Socket.getaddrinfo("www.ruby-lang.org", 80) returns only UDP information"
    on Fri, 2 Jan 2009 00:44:13 +0900, Tanaka Akira <akr@fsij.org> writes:

|1.9 と 1.8 で Socket.getaddrinfo("www.ruby-lang.org", 80) の返り値が違います。
|以下のように、1.9 では 1要素の配列が返り、1.8 では 2要素の配列が返ります。

|www.ruby-lang.org:80 の情報を要求して TCP が出てこないのはよ
|ろしくないんじゃないでしょうか。
|
|調べてみると、r20387 の
|
|Fri Nov 28 18:31:21 2008  Yukihiro Matsumoto  <matz@ruby-lang.org>
|
|        * ext/socket/socket.c (sock_s_getaddrinfo): refactored to remove
|          code duplication regarding getaddrinfo.
|
|という変更が原因なようなのですが、挙動が変わってしまっている
|ので、リファクタリングとしては失敗ではないでしょうか。

おっしゃる通りだと思います。が、先程私の手元で確認したところ
Ruby 1.8と1.9で同じ結果になりました

[["AF_INET", 80, "carbon.ruby-lang.org", "221.186.184.68", 2, 1, 6],
 ["AF_INET", 80, "carbon.ruby-lang.org", "221.186.184.68", 2, 2, 17],
 ["AF_INET", 80, "carbon.ruby-lang.org", "221.186.184.68", 2, 3, 0]]

実行したのは

ruby 1.9.1 (2009-01-06 patchlevel-5000 trunk 21348) [i686-linux]

ですが、これは

  * 環境によって異なる
  * 誰かが直してくださった

のいずれかでしょうか。最近socket.cに手を入れていただいている
のは田中さんなのでみずから直してくださったのでしょうか。私と
田中さんでは今回は同じi686-linuxですから、環境依存の可能性は
低いのですが、ライブラリその他のバージョンの違いなどもあるか
もしれません。

                                まつもと ゆきひろ /:|)