Comparison

net/adns.lua @ 1203:23725bfdeed5

net.adns: Add support for cancelling a non-blocking lookup, optionally calling the handler
author Matthew Wild <mwild1@gmail.com>
date Tue, 26 May 2009 21:48:32 +0100
parent 1005:0eed5db7758d
child 1207:6842bacddfcb
comparison
equal deleted inserted replaced
1202:e69fafc14491 1203:23725bfdeed5
14 handler(peek); 14 handler(peek);
15 return; 15 return;
16 end 16 end
17 log("debug", "Records for %s not in cache, sending query (%s)...", qname, tostring(coroutine.running())); 17 log("debug", "Records for %s not in cache, sending query (%s)...", qname, tostring(coroutine.running()));
18 dns.query(qname, qtype, qclass); 18 dns.query(qname, qtype, qclass);
19 coroutine.yield(nil); -- Wait for reply 19 coroutine.yield({ qclass or "IN", qtype or "A", qname, coroutine.running()}); -- Wait for reply
20 log("debug", "Reply for %s (%s)", qname, tostring(coroutine.running())); 20 log("debug", "Reply for %s (%s)", qname, tostring(coroutine.running()));
21 local ok, err = pcall(handler, dns.peek(qname, qtype, qclass)); 21 local ok, err = pcall(handler, dns.peek(qname, qtype, qclass));
22 if not ok then 22 if not ok then
23 log("debug", "Error in DNS response handler: %s", tostring(err)); 23 log("debug", "Error in DNS response handler: %s", tostring(err));
24 end 24 end
25 end)(dns.peek(qname, qtype, qclass)); 25 end)(dns.peek(qname, qtype, qclass));
26 end
27
28 function cancel(handle, call_handler)
29 dns.cancel(handle);
30 if call_handler then
31 handle[4]()
32 end
26 end 33 end
27 34
28 function new_async_socket(sock) 35 function new_async_socket(sock)
29 local newconn = {}; 36 local newconn = {};
30 local listener = {}; 37 local listener = {};