[ruby-trunk - Bug #5845][Open] Addrinfo#connect from が Addrinfo オブジェクトを受け付けない

Issue #5845 has been reported by Ippei Obayashi.


Bug #5845: Addrinfo#connect_from が Addrinfo オブジェクトを受け付けない

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 オブジェクトを渡した時の返り値が適切でないことです。
添付したパッチでとりあえずは期待通りに動きます。

適当に作った問題再現用テストも添付します。