ruby-changes:16106
From: akr <ko1@a...>
Date: Sat, 29 May 2010 09:06:31 +0900 (JST)
Subject: [ruby-changes:16106] Ruby:r28058 (trunk): * lib/resolv.rb (Resolv::DNS::Requester#request): rescue ECONNREFUSED.
akr 2010-05-29 09:06:17 +0900 (Sat, 29 May 2010) New Revision: 28058 http://svn.ruby-lang.org/cgi-bin/viewvc.cgi?view=rev&revision=28058 Log: * lib/resolv.rb (Resolv::DNS::Requester#request): rescue ECONNREFUSED. Modified files: trunk/ChangeLog trunk/lib/resolv.rb trunk/test/resolv/test_dns.rb Index: ChangeLog =================================================================== --- ChangeLog (revision 28057) +++ ChangeLog (revision 28058) @@ -1,3 +1,7 @@ +Sat May 29 09:04:06 2010 Tanaka Akira <akr@f...> + + * lib/resolv.rb (Resolv::DNS::Requester#request): rescue ECONNREFUSED. + Sat May 29 08:46:29 2010 Nobuyoshi Nakada <nobu@r...> * gc.c (allocate_sorted_heaps, before_gc_sweep, gc_sweep): removed Index: lib/resolv.rb =================================================================== --- lib/resolv.rb (revision 28057) +++ lib/resolv.rb (revision 28058) @@ -638,8 +638,14 @@ if !select_result raise ResolvTimeout end - reply, from = recv_reply(select_result[0]) begin + reply, from = recv_reply(select_result[0]) + rescue Errno::ECONNREFUSED + # No name server running on the server? + # Don't wait anymore. + raise ResolvTimeout + end + begin msg = Message.decode(reply) rescue DecodeError next # broken DNS message ignored Index: test/resolv/test_dns.rb =================================================================== --- test/resolv/test_dns.rb (revision 28057) +++ test/resolv/test_dns.rb (revision 28058) @@ -104,4 +104,18 @@ end } end + + def test_no_server + u = UDPSocket.new + u.bind("127.0.0.1", 0) + _, port, _, host = u.addr + u.close + # A rase condition here. + # Another program may use the port. + # But no way to prevent it. + Resolv::DNS.open(:nameserver_port => [[host, port]]) {|dns| + assert_equal([], dns.getresources("test-no-server.example.org", Resolv::DNS::Resource::IN::A)) + } + end + end -- ML: ruby-changes@q... Info: http://www.atdot.net/~ko1/quickml/