net.server_select: Be less aggressive about server pause
authorKim Alvefur <zash@zash.se>
Tue, 12 Feb 2013 02:24:30 +0000 (03:24 +0100)
committerKim Alvefur <zash@zash.se>
Tue, 12 Feb 2013 02:24:30 +0000 (03:24 +0100)
net/server_select.lua

index 0852d444200a00e4293c6fd937981c9084779e59..36cb12658fd4dcf27d8dd7c66afb01478aba6500 100644 (file)
@@ -201,20 +201,23 @@ 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()
+       handler.pause = function( hard )
                if not handler.paused then
-                       socket:close( )
-                       _sendlistlen = removesocket( _sendlist, socket, _sendlistlen )
                        _readlistlen = removesocket( _readlist, socket, _readlistlen )
-                       _socketlist[ socket ] = nil
-                       socket = nil;
+                       if hard then
+                               _socketlist[ socket ] = nil
+                               socket:close( )
+                               socket = nil;
+                       end
                        handler.paused = true;
                end
        end
-       handler.resume = function()
+       handler.resume = function( )
                if handler.paused then
-                       socket = socket_bind( ip, serverport );
-                       socket:settimeout( 0 )
+                       if not socket then
+                               socket = socket_bind( ip, serverport );
+                               socket:settimeout( 0 )
+                       end
                        _readlistlen = addsocket(_readlist, socket, _readlistlen)
                        _socketlist[ socket ] = handler
                        handler.paused = false;