git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@36416 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
naruse 2012-07-17 08:41:21 +00:00
Родитель c2bcae864e
Коммит da74f0f426
1 изменённых файлов: 6 добавлений и 4 удалений

Просмотреть файл

@ -632,7 +632,7 @@ class TestNetHTTPLocalBind < Test::Unit::TestCase
@server.mount_proc('/show_ip') { |req, res| res.body = req.remote_ip }
http = Net::HTTP.new(config('host'), config('port'))
http.local_host = _select_local_ip_address
http.local_host = _select_local_ip_address(config('host'), config('port'))
assert_not_nil(http.local_host)
assert_nil(http.local_port)
@ -645,7 +645,7 @@ class TestNetHTTPLocalBind < Test::Unit::TestCase
@server.mount_proc('/show_port') { |req, res| res.body = req.peeraddr[1].to_s }
http = Net::HTTP.new(config('host'), config('port'))
http.local_host = _select_local_ip_address
http.local_host = _select_local_ip_address(config('host'), config('port'))
http.local_port = [*10000..20000].shuffle.first.to_s
assert_not_nil(http.local_host)
assert_not_nil(http.local_port)
@ -654,9 +654,11 @@ class TestNetHTTPLocalBind < Test::Unit::TestCase
assert_equal(http.local_port, res.body)
end
def _select_local_ip_address
def _select_local_ip_address(saddr, sport)
Socket.ip_address_list.find { |addr|
addr.ipv4? and not addr.ipv4_loopback? and not addr.ipv4_multicast?
next if Addrinfo.tcp(saddr, sport).afamily != addr.afamily
addr.ipv4? ? !addr.ipv4_loopback? && !addr.ipv4_multicast? \
: !addr.ipv6_loopback? && !addr.ipv6_multicast?
}.ip_address
end
end