From: GOTO Kentaro Date: 2002-09-05T06:03:04+09:00 Subject: [ruby-dev:18178] Re: Selection IPv4/IPv6 at TCPSocket At Tue, 3 Sep 2002 13:30:00 +0900, Tanaka Akira wrote: > 考えてみると、今でも A レコードが複数あった時にもやっぱり教えてくれな > いような。 それもあるし、ICMPみたいにプロトコル依存の場合もあるので、リ ソルバからすれば名前の用途までは分からんということでしょう。 サイトローカルなサービスには DNS の WKS レコードを使うという 方法もありそうな気がしますが、リゾルバが WKS を見ることはど うやらないみたいですね。 > 同じサービス名で異なる内容というと... かめが踊るかどうかとか? まあそういうことです。 # 最近見れるようになりました :) > > 個人的には、過渡期の不具合に対する対処としてはあるライブラリ > > を require したときは環境変数なり何なりで TCPSocket.new の動 > > 作を変えることが出来るくらいの方が良いと思います。そうすれば、 > そう思います。そういう意味で、私はグローバルに挙動が変化するのは悪くな > いと思うんです。これは本来は下のレイヤ(libc とか)に属する性質で、上の > レイヤ(アプリケーション)で表現しようとするとむしろ modular になりにく > い類の話なのだと思っています。 > > で、new に引数を追加するのは上のレイヤでの処理を強く指向しているように > 見えるので好ましく思えません。require ひとつで済むようなものがあった上 > で、微妙な制御を行なうアプリケーションのために、あるいはその require > するライブラリの実装のために、new に「も」引数を追加というなら悪くない > とは思います。 同感です。 というわけで、 実例として環境変数 RUBY_TCPSOCKET_PROTOCOL を みて new の定義を変えるようにしてみました: http://www.notwork.org/~gotoken/ruby/p/as-is/tcpsocket-protocol-depend.rb 例えば、WEBrick にサンプルでついてくるプロクシ htproxy.rb を、 % RUBY_TCPSOCKET_PROTOCOL=inet ruby -rtcpsocket-protocol-depend htproxy.rb で起動すると亀は決して踊りません。逆に、 % RUBY_TCPSOCKET_PROTOCOL=inet6 ruby -rtcpsocket-protocol-depend htproxy.rb とするとAAAAレコードを持たないサイトを見ることができません。 このほか、設定ファイルを書くことによってドメイン毎にプロトコ ルを選べるようにもしてあります。 -- Gotoken