From: Ippei Obayashi Date: 2012-01-05T18:35:33+09:00 Subject: [ruby-dev:45095] [ruby-trunk - Bug #5845][Open] Addrinfo#connect_from が Addrinfo オブジェクトを受け付けない Issue #5845 has been reported by Ippei Obayashi. ---------------------------------------- Bug #5845: Addrinfo#connect_from が Addrinfo オブジェクトを受け付けない https://bugs.ruby-lang.org/issues/5845 Author: Ippei Obayashi Status: Open Priority: Normal Assignee: Category: ext Target version: ruby -v: ruby 2.0.0dev (2012-01-04 trunk 34210) [x86_64-linux] Addrinfo#connect_from (ext/socket/lib/socket.rb) の rdoc には # # Addrinfo object can be taken for the argument. # Addrinfo.tcp("www.ruby-lang.org", 80).connect_from(Addrinfo.tcp("0.0.0.0", 4649)) {|s| # s.print "GET / HTTP/1.0\r\nHost: www.ruby-lang.org\r\n\r\n" # puts s.read # } # とあり、 Addrinfo オブジェクトを受け付けるように書かれていますが、実際には その内容は無視されてしまいます。以下のようなスクリプトで確認できます。 require 'socket' Addrinfo.tcp("www.example.com", 80).connect_from(Addrinfo.tcp("0.0.0.0", 49021)) {|s| p s.local_address.ip_port s.close } 原因は Addrinfo#family_addrinfo に Addrinfo オブジェクトを渡した時の返り値が適切でないことです。 添付したパッチでとりあえずは期待通りに動きます。 適当に作った問題再現用テストも添付します。 -- http://redmine.ruby-lang.org