From: Tanaka Akira Date: 2009-01-06T18:38:44+09:00 Subject: [ruby-dev:37708] Re: [Bug:trunk] Socket.getaddrinfo("www.ruby-lang.org", 80) returns only UDP information In article , Yukihiro Matsumoto writes: > * 環境によって異なる > * 誰かが直してくださった > > のいずれかでしょうか。最近socket.cに手を入れていただいている > のは田中さんなのでみずから直してくださったのでしょうか。私と はい、r21278 で直しました。 r21278 | akr | 2009-01-02 23:36:39 +0900 (Fri, 02 Jan 2009) | 7 lines * ext/socket/socket.c: don't apply socktype hack [ruby-core:184] for sock_s_getaddrinfo. (sock_getaddrinfo): add socktype_hack argument. (sock_addrinfo): call sock_getaddrinfo with socktype_hack. (sock_s_getaddrinfo): call sock_getaddrinfo without socktype_hack. [ruby-dev:37674] という log でも触れてありますが [ruby-core:184] の細工の影響 範囲を Socket.getaddrinfo にまで広げてしまったのが失敗という ことですかね。 この細工は port が整数だったら socktype が無指定だと (環境に よって) Socket.sockaddr_in でエラーになるのを SOCK_DGRAM を 指定して防ぐというもので、 エラーになるのは % grep 514 /etc/services shell 514/tcp syslog 514/udp みたいなあいまいなケースがあるというもっともな理由があり、 エラーを防ぐのも、Socket.sockaddr_in で port がすでに整数だっ たらけっきょく問題にはならないというもっともな理由があるので すが、 Socket.getaddrinfo を呼び出した時には余計な御世話というわけ です。 -- [田中 哲][たなか あきら][Tanaka Akira]