aboutsummaryrefslogtreecommitdiffstats
path: root/net/server_select.lua
diff options
context:
space:
mode:
authorWaqas Hussain <waqas20@gmail.com>2013-04-16 18:15:10 -0400
committerWaqas Hussain <waqas20@gmail.com>2013-04-16 18:15:10 -0400
commit966f86f91c711540486e25d9b9d0c1fa2bde4cfb (patch)
tree2363b7bab68fc54000a42ede19d91b88bd966689 /net/server_select.lua
parent6a7a7b06ca8a43144958354e00699561625c5aab (diff)
downloadprosody-966f86f91c711540486e25d9b9d0c1fa2bde4cfb.tar.gz
prosody-966f86f91c711540486e25d9b9d0c1fa2bde4cfb.zip
net.server_select: Move socket timeout cleanup code out of a timer, into the select loop (which makes util.timer the only timer using server_select._addtimer).
Diffstat (limited to 'net/server_select.lua')
-rw-r--r--net/server_select.lua42
1 files changed, 20 insertions, 22 deletions
diff --git a/net/server_select.lua b/net/server_select.lua
index 6592de9b..86c9daef 100644
--- a/net/server_select.lua
+++ b/net/server_select.lua
@@ -846,6 +846,26 @@ loop = function(once) -- this is the main loop of the program
_closelist[ handler ] = nil;
end
_currenttime = luasocket_gettime( )
+
+ local difftime = os_difftime( _currenttime - _starttime )
+ if difftime > _checkinterval then
+ _starttime = _currenttime
+ for handler, timestamp in pairs( _writetimes ) do
+ if os_difftime( _currenttime - timestamp ) > _sendtimeout then
+ --_writetimes[ handler ] = nil
+ handler.disconnect( )( handler, "send timeout" )
+ handler:force_close() -- forced disconnect
+ end
+ end
+ for handler, timestamp in pairs( _readtimes ) do
+ if os_difftime( _currenttime - timestamp ) > _readtimeout then
+ --_readtimes[ handler ] = nil
+ handler.disconnect( )( handler, "read timeout" )
+ handler:close( ) -- forced disconnect?
+ end
+ end
+ end
+
if _currenttime - _timer >= math_min(next_timer_time, 1) then
next_timer_time = math_huge;
for i = 1, _timerlistlen do
@@ -921,28 +941,6 @@ use "setmetatable" ( _writetimes, { __mode = "k" } )
_timer = luasocket_gettime( )
_starttime = luasocket_gettime( )
-addtimer( function( )
- local difftime = os_difftime( _currenttime - _starttime )
- if difftime > _checkinterval then
- _starttime = _currenttime
- for handler, timestamp in pairs( _writetimes ) do
- if os_difftime( _currenttime - timestamp ) > _sendtimeout then
- --_writetimes[ handler ] = nil
- handler.disconnect( )( handler, "send timeout" )
- handler:force_close() -- forced disconnect
- end
- end
- for handler, timestamp in pairs( _readtimes ) do
- if os_difftime( _currenttime - timestamp ) > _readtimeout then
- --_readtimes[ handler ] = nil
- handler.disconnect( )( handler, "read timeout" )
- handler:close( ) -- forced disconnect?
- end
- end
- end
- end
-)
-
local function setlogger(new_logger)
local old_logger = log;
if new_logger then