From 434e8e014cb21b8d15d512b966ea4f397fd0d369 Mon Sep 17 00:00:00 2001 From: Diego Nehab Date: Thu, 21 Apr 2005 03:15:34 +0000 Subject: Better connection handling. --- samples/forward.lua | 12 ++++++------ samples/tinyirc.lua | 25 +++++++++++++++++-------- 2 files changed, 23 insertions(+), 14 deletions(-) (limited to 'samples') diff --git a/samples/forward.lua b/samples/forward.lua index ff65b84..e51c5ce 100644 --- a/samples/forward.lua +++ b/samples/forward.lua @@ -76,13 +76,13 @@ function connect(who, host, port) if not ret and err == "timeout" then wait(who, "output") ret, err = who:connect(host, port) + if not ret and err ~= "already connected" then + kick(who) + kick(context[who].peer) + return + end end - if not ret then - kick(who) - kick(context[who].peer) - else - return forward(who) - end + return forward(who) end -- gets rid of a client diff --git a/samples/tinyirc.lua b/samples/tinyirc.lua index 684e7c0..e3dd517 100644 --- a/samples/tinyirc.lua +++ b/samples/tinyirc.lua @@ -24,20 +24,29 @@ io.write("Servers bound\n") -- simple set implementation -- the select function doesn't care about what is passed to it as long as -- it behaves like a table +-- creates a new set data structure function newset() local reverse = {} local set = {} - setmetatable(set, { __index = { - insert = function(set, value) - table.insert(set, value) - reverse[value] = table.getn(set) + return setmetatable(set, {__index = { + insert = function(set, value) + if not reverse[value] then + table.insert(set, value) + reverse[value] = table.getn(set) + end end, remove = function(set, value) - table.remove(set, reverse[value]) - reverse[value] = nil - end, + local index = reverse[value] + if index then + reverse[value] = nil + local top = table.remove(set) + if top ~= value then + reverse[top] = index + set[index] = top + end + end + end }}) - return set end set = newset() -- cgit v1.2.3-55-g6feb