net.server_select: Move socket timeout cleanup code out of a timer, into the select...
authorWaqas Hussain <waqas20@gmail.com>
Tue, 16 Apr 2013 22:15:10 +0000 (18:15 -0400)
committerWaqas Hussain <waqas20@gmail.com>
Tue, 16 Apr 2013 22:15:10 +0000 (18:15 -0400)
net/server_select.lua

index 6592de9b030c6cd546b3bcfcc614002b8c90f0fd..86c9daef24ae7e8fd63a130a28177b95c9ddde05 100644 (file)
@@ -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