From: "NARUSE, Yui" Date: 2008-01-06T01:05:01+09:00 Subject: [ruby-dev:32929] Re: Resolv::DNS#getaddresses doesn't return IPv6 address 成瀬です Takahiro Kambe wrote: > In message <477EF0C9.4060103@airemix.com> > on Sat, 5 Jan 2008 11:51:41 +0900, > "NARUSE, Yui" wrote: >>> % dig example.com any >>> >>> といった、タイプがANYの問い合わせを行うということでしょうか? >> はい、そして A と AAAA レコードの情報だけ拾っています。 >> 何か副作用とかありましたっけ? > ANYによる問い合わせは、ネームサーバがキャッシュを持っている場合は、そ > のレコードだけを返したはずです。 > > キャッシュがない場合は、recursiveな問い合わせであれば、それなりの処理を > 行って欲しい情報が得られるでしょう。 > > 一方、何らかの理由で A や AAAA レコードの一部だけがキャッシュに残って > いた場合は、それだけが返ります。 > > 以上から、AとAAAAレコードが欲しいのなら、面倒でもタイプがAとAAAAの問い > 合わせを別々に行うべき、ということになります。 > > > 記憶だけで書いていますが、昔々sendmailあたりのMXを問い合わせるときの処 > 理で話題になっていました。 なーるほど、以下の修正をコミットしておきました。 Index: lib/resolv.rb =================================================================== --- lib/resolv.rb (リビジョン 14897) +++ lib/resolv.rb (リビジョン 14898) @@ -387,16 +387,8 @@ # be a Resolv::IPv4 or Resolv::IPv6 def each_address(name) - buf = [] - each_resource(name, Resource::IN::ANY) do |resource| - case resource.address - when Resolv::IPv4 - yield resource.address - when Resolv::IPv6 - buf << resource.address - end - end - buf.each {|resource| yield resource.address} + each_resource(name, Resource::IN::A) {|resource| yield resource.address} + each_resource(name, Resource::IN::AAAA) {|resource| yield resource.address} end ## -- NARUSE, Yui DBDB A476 FDBD 9450 02CD 0EFC BCE3 C388 472E C1EA