From b1a22d59e455f22151650c88d622ee3a2710a9ca Mon Sep 17 00:00:00 2001
From: Matthew Wild <mwild1@gmail.com>
Date: Fri, 24 Dec 2010 04:52:40 +0000
Subject: net.adns: Handle dns.query() failures, and pass error to handler

---
 net/adns.lua | 15 +++++++++++----
 1 file changed, 11 insertions(+), 4 deletions(-)

(limited to 'net')

diff --git a/net/adns.lua b/net/adns.lua
index d0151c8c..2f7b6804 100644
--- a/net/adns.lua
+++ b/net/adns.lua
@@ -26,10 +26,17 @@ function lookup(handler, qname, qtype, qclass)
 					return;
 				end
 				log("debug", "Records for %s not in cache, sending query (%s)...", qname, tostring(coroutine.running()));
-				dns.query(qname, qtype, qclass);
-				coroutine.yield({ qclass or "IN", qtype or "A", qname, coroutine.running()}); -- Wait for reply
-				log("debug", "Reply for %s (%s)", qname, tostring(coroutine.running()));
-				local ok, err = pcall(handler, dns.peek(qname, qtype, qclass));
+				local ok, err = dns.query(qname, qtype, qclass);
+				if ok then
+					coroutine.yield({ qclass or "IN", qtype or "A", qname, coroutine.running()}); -- Wait for reply
+					log("debug", "Reply for %s (%s)", qname, tostring(coroutine.running()));
+				end
+				if ok then
+					ok, err = pcall(handler, dns.peek(qname, qtype, qclass));
+				else
+					log("error", "Error sending DNS query: %s", err);
+					ok, err = pcall(handler, nil, err);
+				end
 				if not ok then
 					log("error", "Error in DNS response handler: %s", tostring(err));
 				end
-- 
cgit v1.2.3