[前][次][番号順一覧][スレッド一覧]

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/

[前][次][番号順一覧][スレッド一覧]