aboutsummaryrefslogtreecommitdiffstats
path: root/net/server_select.lua
diff options
context:
space:
mode:
authorKim Alvefur <zash@zash.se>2012-12-28 15:14:11 +0100
committerKim Alvefur <zash@zash.se>2012-12-28 15:14:11 +0100
commit45f6b0c64c3ab63603fe8bc8b29f2dbc835b4e92 (patch)
tree0203d6bd6df69296fe7defc78a44293a3e08767d /net/server_select.lua
parent93fcefee1c694c8917be74879d4d204730904e07 (diff)
parent71f54b16f9bf4a2561f80058affb049850c90327 (diff)
downloadprosody-45f6b0c64c3ab63603fe8bc8b29f2dbc835b4e92.tar.gz
prosody-45f6b0c64c3ab63603fe8bc8b29f2dbc835b4e92.zip
Merge 0.9->trunk
Diffstat (limited to 'net/server_select.lua')
-rw-r--r--net/server_select.lua23
1 files changed, 23 insertions, 0 deletions
diff --git a/net/server_select.lua b/net/server_select.lua
index 8cb4e235..97b9f199 100644
--- a/net/server_select.lua
+++ b/net/server_select.lua
@@ -185,6 +185,9 @@ wrapserver = function( listeners, socket, ip, serverport, pattern, sslctx, maxco
end
handler.remove = function( )
connections = connections - 1
+ if handler then
+ handler.resume( )
+ end
end
handler.close = function()
socket:close( )
@@ -197,6 +200,25 @@ wrapserver = function( listeners, socket, ip, serverport, pattern, sslctx, maxco
--mem_free( )
out_put "server.lua: closed server handler and removed sockets from list"
end
+ handler.pause = function()
+ if not handler.paused then
+ socket:close( )
+ _sendlistlen = removesocket( _sendlist, socket, _sendlistlen )
+ _readlistlen = removesocket( _readlist, socket, _readlistlen )
+ _socketlist[ socket ] = nil
+ socket = nil;
+ handler.paused = true;
+ end
+ end
+ handler.resume = function()
+ if handler.paused then
+ socket = socket_bind( ip, serverport );
+ socket:settimeout( 0 )
+ _readlistlen = addsocket(_readlist, socket, _readlistlen)
+ _socketlist[ socket ] = handler
+ handler.paused = false;
+ end
+ end
handler.ip = function( )
return ip
end
@@ -208,6 +230,7 @@ wrapserver = function( listeners, socket, ip, serverport, pattern, sslctx, maxco
end
handler.readbuffer = function( )
if connections > maxconnections then
+ handler.pause( )
out_put( "server.lua: refused new client connection: server full" )
return false
end