Diff

net/dns.lua @ 1202:e69fafc14491

net.dns: Add support for cancelling a coroutine-based request
author Matthew Wild <mwild1@gmail.com>
date Tue, 26 May 2009 21:47:25 +0100
parent 896:2c0b9e3c11c3
child 1523:841d61be198f
line wrap: on
line diff
--- a/net/dns.lua	Tue May 26 04:51:05 2009 +0100
+++ b/net/dns.lua	Tue May 26 21:47:25 2009 +0100
@@ -21,8 +21,8 @@
 local coroutine, io, math, socket, string, table =
       coroutine, io, math, socket, string, table
 
-local ipairs, next, pairs, print, setmetatable, tostring, assert, error =
-      ipairs, next, pairs, print, setmetatable, tostring, assert, error
+local ipairs, next, pairs, print, setmetatable, tostring, assert, error, unpack =
+      ipairs, next, pairs, print, setmetatable, tostring, assert, error, unpack
 
 local get, set = ztact.get, ztact.set
 
@@ -711,6 +711,12 @@
   return response
 end
 
+function resolver:cancel(data)
+	local cos = get (self.wanted, unpack(data, 1, 3))
+	if cos then
+		cos[data[4]] = nil;
+	end
+end
 
 function resolver:pulse ()    -- - - - - - - - - - - - - - - - - - - - -  pulse
 
@@ -847,6 +853,8 @@
 function dns.feed (...)    -- - - - - - - - - - - - - - - - - - - - - -  feed
   return resolve (resolver.feed, ...)  end
 
+function dns.cancel(...)   -- - - - - - - - - - - - - - - - - - - - - -  cancel
+  return resolve(resolver.cancel, ...) end
 
 function dns:socket_wrapper_set (...)    -- - - - - - - - -  socket_wrapper_set
   return resolve (resolver.socket_wrapper_set, ...)  end