projects
/
prosody.git
/ commitdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
| commitdiff |
tree
raw
|
patch
|
inline
| side by side (from parent 1:
e82c820
)
net.server_event: Schedule another read callback if there is still data left in buffe...
author
Kim Alvefur
<zash@zash.se>
Wed, 4 May 2016 13:29:11 +0000
(15:29 +0200)
committer
Kim Alvefur
<zash@zash.se>
Wed, 4 May 2016 13:29:11 +0000
(15:29 +0200)
net/server_event.lua
patch
|
blob
|
history
diff --git
a/net/server_event.lua
b/net/server_event.lua
index e0dc175fdbd2d25f432070f544dbfb83cc527b57..2cb45553b9fdd552413602e66aea1a77ebf49b77 100644
(file)
--- 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)
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
}
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
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
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
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
return EV_READ, cfg.READ_TIMEOUT
end