core.s2smanager: Don't recurse CNAMEs infinitely :)
[prosody.git] / net / server.lua
index 069db50f5dc0b17e4dd34c6b08a3a790b91335c1..971ea5530695f191cfeff18dcc1c9b3c93eae3fe 100644 (file)
@@ -246,7 +246,7 @@ wrapserver = function( listeners, socket, ip, serverport, pattern, sslctx, maxco
         _socketlist[ socket ] = nil\r
         handler = nil\r
         socket = nil\r
-        --mem_free( )\r
+        mem_free( )\r
         out_put "server.lua: closed server handler and removed sockets from list"\r
     end\r
     handler.ip = function( )\r
@@ -363,6 +363,7 @@ wrapconnection = function( server, listeners, socket, ip, serverport, clientport
                 send( socket, table_concat( bufferqueue, "", 1, bufferqueuelen ), 1, bufferlen )    -- forced send\r
             end\r
         end\r
+        if not handler then return true; end\r
         _ = shutdown and shutdown( socket )\r
         socket:close( )\r
         _sendlistlen = removesocket( _sendlist, socket, _sendlistlen )\r
@@ -373,7 +374,7 @@ wrapconnection = function( server, listeners, socket, ip, serverport, clientport
             handler = nil\r
         end\r
         socket = nil\r
-        --mem_free( )\r
+        mem_free( )\r
        if server then\r
                server.remove( )\r
        end\r
@@ -483,13 +484,19 @@ wrapconnection = function( server, listeners, socket, ip, serverport, clientport
         end\r
     end\r
     local _sendbuffer = function( )    -- this function sends data\r
-        local buffer = table_concat( bufferqueue, "", 1, bufferqueuelen )\r
-        local succ, err, byte = send( socket, buffer, 1, bufferlen )\r
-        local count = ( succ or byte or 0 ) * STAT_UNIT\r
-        sendtraffic = sendtraffic + count\r
-        _sendtraffic = _sendtraffic + count\r
-        _ = _cleanqueue and clean( bufferqueue )\r
-        --out_put( "server.lua: sended '", buffer, "', bytes: ", tostring(succ), ", error: ", tostring(err), ", part: ", tostring(byte), ", to: ", tostring(ip), ":", tostring(clientport) )\r
+       local succ, err, byte, buffer, count;\r
+       local count;\r
+       if socket then\r
+            buffer = table_concat( bufferqueue, "", 1, bufferqueuelen )\r
+            succ, err, byte = send( socket, buffer, 1, bufferlen )\r
+            count = ( succ or byte or 0 ) * STAT_UNIT\r
+            sendtraffic = sendtraffic + count\r
+            _sendtraffic = _sendtraffic + count\r
+            _ = _cleanqueue and clean( bufferqueue )\r
+            --out_put( "server.lua: sended '", buffer, "', bytes: ", tostring(succ), ", error: ", tostring(err), ", part: ", tostring(byte), ", to: ", tostring(ip), ":", tostring(clientport) )\r
+        else\r
+            succ, err, count = false, "closed", 0;\r
+        end\r
         if succ then    -- sending succesful\r
             bufferqueuelen = 0\r
             bufferlen = 0\r
@@ -559,7 +566,7 @@ wrapconnection = function( server, listeners, socket, ip, serverport, clientport
             socket, err = ssl_wrap( socket, sslctx )    -- wrap socket\r
             if err then\r
                 out_put( "server.lua: ssl error: ", tostring(err) )\r
-                --mem_free( )\r
+                mem_free( )\r
                 return nil, nil, err    -- fatal error\r
             end\r
             socket:settimeout( 0 )\r
@@ -664,7 +671,7 @@ closesocket = function( socket )
     _readlistlen = removesocket( _readlist, socket, _readlistlen )\r
     _socketlist[ socket ] = nil\r
     socket:close( )\r
-    --mem_free( )\r
+    mem_free( )\r
 end\r
 \r
 ----------------------------------// PUBLIC //--\r
@@ -733,7 +740,7 @@ closeall = function( )
     _sendlist = { }\r
     _timerlist = { }\r
     _socketlist = { }\r
-    --mem_free( )\r
+    mem_free( )\r
 end\r
 \r
 getsettings = function( )\r