mirror of
https://github.com/lunarmodules/luasocket.git
synced 2024-12-26 04:28:20 +01:00
Better connection handling.
This commit is contained in:
parent
4e3cf63c95
commit
434e8e014c
3
TODO
3
TODO
@ -1,5 +1,4 @@
|
|||||||
|
|
||||||
BUG NO SET DO TINYIRC!!! SINISTRO.
|
|
||||||
talk about the non-blocking connect in the manual
|
talk about the non-blocking connect in the manual
|
||||||
test it on Windows!!!
|
test it on Windows!!!
|
||||||
|
|
||||||
@ -41,3 +40,5 @@ testar os options!
|
|||||||
- inet_ntoa também é uma merda.
|
- inet_ntoa também é uma merda.
|
||||||
|
|
||||||
eliminate globals from namespaces created by module().
|
eliminate globals from namespaces created by module().
|
||||||
|
|
||||||
|
* BUG NO SET DO TINYIRC!!! SINISTRO.
|
||||||
|
@ -76,13 +76,13 @@ function connect(who, host, port)
|
|||||||
if not ret and err == "timeout" then
|
if not ret and err == "timeout" then
|
||||||
wait(who, "output")
|
wait(who, "output")
|
||||||
ret, err = who:connect(host, port)
|
ret, err = who:connect(host, port)
|
||||||
|
if not ret and err ~= "already connected" then
|
||||||
|
kick(who)
|
||||||
|
kick(context[who].peer)
|
||||||
|
return
|
||||||
|
end
|
||||||
end
|
end
|
||||||
if not ret then
|
return forward(who)
|
||||||
kick(who)
|
|
||||||
kick(context[who].peer)
|
|
||||||
else
|
|
||||||
return forward(who)
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
|
|
||||||
-- gets rid of a client
|
-- gets rid of a client
|
||||||
|
@ -24,20 +24,29 @@ io.write("Servers bound\n")
|
|||||||
-- simple set implementation
|
-- simple set implementation
|
||||||
-- the select function doesn't care about what is passed to it as long as
|
-- the select function doesn't care about what is passed to it as long as
|
||||||
-- it behaves like a table
|
-- it behaves like a table
|
||||||
|
-- creates a new set data structure
|
||||||
function newset()
|
function newset()
|
||||||
local reverse = {}
|
local reverse = {}
|
||||||
local set = {}
|
local set = {}
|
||||||
setmetatable(set, { __index = {
|
return setmetatable(set, {__index = {
|
||||||
insert = function(set, value)
|
insert = function(set, value)
|
||||||
table.insert(set, value)
|
if not reverse[value] then
|
||||||
reverse[value] = table.getn(set)
|
table.insert(set, value)
|
||||||
|
reverse[value] = table.getn(set)
|
||||||
|
end
|
||||||
end,
|
end,
|
||||||
remove = function(set, value)
|
remove = function(set, value)
|
||||||
table.remove(set, reverse[value])
|
local index = reverse[value]
|
||||||
reverse[value] = nil
|
if index then
|
||||||
end,
|
reverse[value] = nil
|
||||||
|
local top = table.remove(set)
|
||||||
|
if top ~= value then
|
||||||
|
reverse[top] = index
|
||||||
|
set[index] = top
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
}})
|
}})
|
||||||
return set
|
|
||||||
end
|
end
|
||||||
|
|
||||||
set = newset()
|
set = newset()
|
||||||
|
@ -208,7 +208,7 @@ static int meth_bind(lua_State *L)
|
|||||||
\*-------------------------------------------------------------------------*/
|
\*-------------------------------------------------------------------------*/
|
||||||
static int meth_connect(lua_State *L)
|
static int meth_connect(lua_State *L)
|
||||||
{
|
{
|
||||||
p_tcp tcp = (p_tcp) aux_checkclass(L, "tcp{master}", 1);
|
p_tcp tcp = (p_tcp) aux_checkgroup(L, "tcp{any}", 1);
|
||||||
const char *address = luaL_checkstring(L, 2);
|
const char *address = luaL_checkstring(L, 2);
|
||||||
unsigned short port = (unsigned short) luaL_checknumber(L, 3);
|
unsigned short port = (unsigned short) luaL_checknumber(L, 3);
|
||||||
p_tm tm = tm_markstart(&tcp->tm);
|
p_tm tm = tm_markstart(&tcp->tm);
|
||||||
|
Loading…
Reference in New Issue
Block a user