From: NISHI Takao Date: 2002-09-02T20:26:11+09:00 Subject: [ruby-dev:18150] Re: Selection IPv4/IPv6 at TCPSocket にし@おかやまです。 At Mon, 2 Sep 2002 14:11:04 +0900, Tanaka Akira wrote: > ちょっとした疑問なんですが、IPv4 と IPv6 のどちらを選ぶべきかの情報は > 本来どこにあるんでしょう? ちゃんと確認したわけではありませんが,現状ではリゾルバとカーネル依存では ないかと思います。 USAGIカーネル+glibc2.2では,DNSにAAAAレコードがあり,カーネルがIPv6に対 応していればIPv6を選択するようになっているように見えます。 FreeBSD 4.3でも同様です。 # libcの中を見てませんので嘘をついてるかもしれません。 > なんとなく、本来は DNS にそういう情報があって、自動的に選択されるべき > な気がします。で、この話はなんらかの不具合によりそれがうまく動かない場 > 合に対する手段を提供するというのが目的だと思うんですが、だとすると、そ > の手段が IPv4 のハードコードをしやすい形だと、不具合のない環境で動かす > のが厄介になりがちな気がします。 > > プログラム本体は本来正しいやりかたで書き、付加的に不具合を避ける方法を > Ruby に教えてやるというのがいいんじゃないかという気がするんですが。 > (たとえば、このホストは IPv4 にしろとか。) 現在のRubyではopen_inet()関数内で hints.ai_family = PF_UNSPEC;と常に自動 的にai_familyを選択するような実装がなされています。 しかしIPv4/IPv6のどちらを使うかを明示できないため,Aレコード,AAAAレコー ドを共にもつホスト上で稼動しているものの,実際にはIPv4,IPv6のどちらかで しかlistenしていないサービスにアクセスした場合,IPv6で接続に失敗したら IPv4で(あるいはその逆で)と言う処理が困難となっています。 これはIPv4->IPv6移行の過渡期的ならでは現象だと思いますので,田中さんのおっ しゃるようにクラス新設という目立った方法ではなく,付加的な情報として扱う 方が良いように思えます。 加えて,UDPSocket#newとの対称性の点からも引数でAI_FAMILYを指定できる方が うつくしいと思うのですが如何でしょうか? # わたしが投げたパッチはai_family引数のチェックをしていないのでアレです # が(^^; -- NISHI Takao D add ninth Co.,Ltd. http://www.Dadd9.com/ 1-2-24 Toyonari, Okayama, 700-0942, Japan @@@@ Phone:+81-86-801-4216 Facsimile:+81-86-801-4217 OO/ PGP:1466 BB16 3186 CC11 1A06 713C 5518 3A2A A122 118A -|/