net.server_event: Schedule another read callback if there is still data left in buffe...
authorKim Alvefur <zash@zash.se>
Wed, 4 May 2016 13:29:11 +0000 (15:29 +0200)
committerKim Alvefur <zash@zash.se>
Wed, 4 May 2016 13:29:11 +0000 (15:29 +0200)
net/server_event.lua

index e0dc175fdbd2d25f432070f544dbfb83cc527b57..2cb45553b9fdd552413602e66aea1a77ebf49b77 100644 (file)
@@ -30,6 +30,7 @@ local cfg = {
        WRITE_TIMEOUT         = 180,  -- timeout in seconds for write data on socket
        CONNECT_TIMEOUT       = 20,  -- timeout in seconds for connection attempts
        CLEAR_DELAY           = 5,  -- seconds to wait for clearing interface list (and calling ondisconnect listeners)
+       READ_RETRY_DELAY      = 1e-06, -- if, after reading, there is still data in buffer, wait this long and continue reading
        DEBUG                 = true,  -- show debug messages
 }
 
@@ -559,7 +560,7 @@ local function handleclient( client, ip, port, server, pattern, listener, sslctx
                        interface.eventread = nil
                        return -1
                end
-               if EV_TIMEOUT == event and interface:onreadtimeout() ~= true then
+               if EV_TIMEOUT == event and not interface.conn:dirty() and interface:onreadtimeout() ~= true then
                        return -1 -- took too long to get some data from client -> disconnect
                end
                if interface._usingssl then  -- handle luasec
@@ -605,6 +606,9 @@ local function handleclient( client, ip, port, server, pattern, listener, sslctx
                        interface.eventread = nil;
                        return -1;
                end
+               if interface.conn:dirty() then -- still data left in buffer
+                       return EV_TIMEOUT, cfg.READ_RETRY_DELAY;
+               end
                return EV_READ, cfg.READ_TIMEOUT
        end