From: "NARUSE, Yui" Date: 2011-08-11T23:01:01+09:00 Subject: [ruby-dev:44380] Re: [Ruby 1.9 - Feature #5180] net/http の接続時に用いる IP アドレスの指定 (2011/08/10 18:54), Tanaka Akira wrote: > 2011年8月10日17:20 NARUSE, Yui : > >> TCPSocket.open の中などでやるという方向自体はありだと思っているんですが、 >> ではそこで使う IPアドレスをどこから取ってくるかとなると、 >> グローバル変数を使うとかしないと上手くいかないんじゃないかと > > グローバル変数が嫌ならスレッド変数とか。 require 'net/http' addrs = %w/192.168.0.1 192.168.0.2 192.168.0.3/ def TCPSocket.open(host, serv, *rest) TCPSocket.new(Thread.current[:ipaddr], serv, *rest) end addrs.map do |addr| Thread.new do Thread.current[:ipaddr] = addr Net::HTTP.start('exapmle.org', use_ssl: true) do |h| r = h.head('/') p [addr, h.instance_variable_get(:@socket).io.peeraddr[3], r] end end end.each(&:join) class << TCPSocket remove_method :open end こんな感じですかね、うーん、ここまで大げさにしないといけないのかなぁ。 >> この提案だとこんな感じになります。 > > net/http に対処を入れるほどの話なのかなぁ。 もともと conn_address は Proxy 対応のために抽象化されているので、 そこをもうちょっといじるのはそこまで突飛な話でもないと思うんですけどね。 -- NARUSE, Yui