aboutsummaryrefslogtreecommitdiffstats
path: root/net
diff options
context:
space:
mode:
authorKim Alvefur <zash@zash.se>2016-05-04 16:58:25 +0200
committerKim Alvefur <zash@zash.se>2016-05-04 16:58:25 +0200
commit32be089091c4303c5dabccefcfdf8e38cf6d6366 (patch)
tree4069efefa5eba71585ead8faa0cbe970de5dcecd /net
parentc5f066571103f02b6cd79af59cbc6eec6e7a8aad (diff)
parent47fb0705f697eef316c115ce1ad736951e31dd34 (diff)
downloadprosody-32be089091c4303c5dabccefcfdf8e38cf6d6366.tar.gz
prosody-32be089091c4303c5dabccefcfdf8e38cf6d6366.zip
Merge 0.10->trunk
Diffstat (limited to 'net')
-rw-r--r--net/server_event.lua11
1 files changed, 6 insertions, 5 deletions
diff --git a/net/server_event.lua b/net/server_event.lua
index 08524646..c10173e4 100644
--- a/net/server_event.lua
+++ b/net/server_event.lua
@@ -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
@@ -588,10 +589,7 @@ local function handleclient( client, ip, port, server, pattern, listener, sslctx
interface.eventwrite = addevent( base, interface.conn, EV_WRITE, interface.writecallback, cfg.WRITE_TIMEOUT )
end
interface.eventreadtimeout = addevent( base, nil, EV_TIMEOUT,
- function( )
- interface:_close()
- end, cfg.READ_TIMEOUT
- )
+ function( ) interface:_close() end, cfg.READ_TIMEOUT)
debug( "wantwrite during read attempt, reg it in writecallback but dont know what really happens next..." )
-- to be honest i dont know what happens next, if it is allowed to first read, the write etc...
else -- connection was closed or fatal error
@@ -608,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