Diff

net/adns.lua @ 2232:aa8db84ae69d

net.adns: Some cleanup, happens to also make it compatible with libevent
author Matthew Wild <mwild1@gmail.com>
date Thu, 26 Nov 2009 22:08:10 +0000
parent 2128:f107f0205793
child 2556:50d1ba86a959
line wrap: on
line diff
--- a/net/adns.lua	Thu Nov 26 17:17:54 2009 +0000
+++ b/net/adns.lua	Thu Nov 26 22:08:10 2009 +0000
@@ -43,33 +43,32 @@
 end
 
 function new_async_socket(sock, resolver)
-	local newconn, peername = {}, "<unknown>";
+	local peername = "<unknown>";
 	local listener = {};
+	local handler = {};
 	function listener.onincoming(conn, data)
-		dns.feed(sock, data);
+		dns.feed(handler, data);
 	end
 	function listener.ondisconnect(conn, err)
 		log("warn", "DNS socket for %s disconnected: %s", peername, err);
 		local servers = resolver.server;
-		if resolver.socketset[newconn.handler] == resolver.best_server and resolver.best_server == #servers then
+		if resolver.socketset[conn] == resolver.best_server and resolver.best_server == #servers then
 			log("error", "Exhausted all %d configured DNS servers, next lookup will try %s again", #servers, servers[1]);
 		end
 		
 		resolver:servfail(conn); -- Let the magic commence
 	end
-	newconn.handler, newconn._socket = server.wrapclient(sock, "dns", 53, listener);
-	if not newconn.handler then
+	handler = server.wrapclient(sock, "dns", 53, listener);
+	if not handler then
 		log("warn", "handler is nil");
 	end
-	if not newconn._socket then
-		log("warn", "socket is nil");
-	end
-	newconn.handler.settimeout = function () end
-	newconn.handler.setsockname = function (_, ...) return sock:setsockname(...); end
-	newconn.handler.setpeername = function (_, ...) peername = (...); local ret = sock:setpeername(...); _.setsend(sock.send); return ret; end
-	newconn.handler.connect = function (_, ...) return sock:connect(...) end	
-	newconn.handler.send = function (_, data) _.write(_, data); return _.sendbuffer(); end	
-	return newconn.handler;
+	
+	handler.settimeout = function () end
+	handler.setsockname = function (_, ...) return sock:setsockname(...); end
+	handler.setpeername = function (_, ...) peername = (...); local ret = sock:setpeername(...); _:set_send(sock.send); return ret; end
+	handler.connect = function (_, ...) return sock:connect(...) end	
+	handler.send = function (_, data) _:write(data);  return _.sendbuffer and _.sendbuffer(); end	
+	return handler;
 end
 
 dns:socket_wrapper_set(new_async_socket);