From 1f2665ff51d61aec7e91294b199a9acc8f845445 Mon Sep 17 00:00:00 2001
From: Matthew Wild <mwild1@gmail.com>
Date: Fri, 24 Dec 2010 04:52:13 +0000
Subject: net.dns: resolver:query(): Handle getsocket() failures, and return
 true on success

---
 net/dns.lua | 19 ++++++++++++-------
 1 file changed, 12 insertions(+), 7 deletions(-)

(limited to 'net')

diff --git a/net/dns.lua b/net/dns.lua
index 0101daa3..61fb62e8 100644
--- a/net/dns.lua
+++ b/net/dns.lua
@@ -722,7 +722,10 @@ function resolver:query(qname, qtype, qclass)    -- - - - - - - - - - -- query
 		--set(self.yielded, co, qclass, qtype, qname, true);
 	end
 
-	local conn = self:getsocket(o.server)
+	local conn, err = self:getsocket(o.server)
+	if not conn then
+		return nil, err;
+	end
 	conn:send (o.packet)
 	
 	if timer and self.timeout then
@@ -734,16 +737,18 @@ function resolver:query(qname, qtype, qclass)    -- - - - - - - - - - -- query
 					i = i + 1;
 					self:servfail(conn);
 					o.server = self.best_server;
-					conn = self:getsocket(o.server);
-					conn:send(o.packet);
-					return self.timeout;
-				else
-					-- Tried everything, failed
-					self:cancel(qclass, qtype, qname, co, true);
+					conn, err = self:getsocket(o.server);
+					if conn then
+						conn:send(o.packet);
+						return self.timeout;
+					end
 				end
+				-- Tried everything, failed
+				self:cancel(qclass, qtype, qname, co, true);
 			end
 		end)
 	end
+	return true;
 end
 
 function resolver:servfail(sock)
-- 
cgit v1.2.3