net/server_select.lua
changeset 7098 3e1dac35af87
parent 7097 e8f202856fc0
child 7099 95e4c81291cc
equal deleted inserted replaced
7097:e8f202856fc0 7098:3e1dac35af87
   101 local _readtraffic
   101 local _readtraffic
   102 
   102 
   103 local _selecttimeout
   103 local _selecttimeout
   104 local _sleeptime
   104 local _sleeptime
   105 local _tcpbacklog
   105 local _tcpbacklog
       
   106 local _accepretry
   106 
   107 
   107 local _starttime
   108 local _starttime
   108 local _currenttime
   109 local _currenttime
   109 
   110 
   110 local _maxsendlen
   111 local _maxsendlen
   141 _readtraffic = 0
   142 _readtraffic = 0
   142 
   143 
   143 _selecttimeout = 1 -- timeout of socket.select
   144 _selecttimeout = 1 -- timeout of socket.select
   144 _sleeptime = 0 -- time to wait at the end of every loop
   145 _sleeptime = 0 -- time to wait at the end of every loop
   145 _tcpbacklog = 128 -- some kind of hint to the OS
   146 _tcpbacklog = 128 -- some kind of hint to the OS
       
   147 _accepretry = 10 -- seconds to wait until the next attempt of a full server to accept
   146 
   148 
   147 _maxsendlen = 51000 * 1024 -- max len of send buffer
   149 _maxsendlen = 51000 * 1024 -- max len of send buffer
   148 _maxreadlen = 25000 * 1024 -- max len of read buffer
   150 _maxreadlen = 25000 * 1024 -- max len of read buffer
   149 
   151 
   150 _checkinterval = 1200000 -- interval in secs to check idle clients
   152 _checkinterval = 1200000 -- interval in secs to check idle clients
   796 		send_timeout = _sendtimeout;
   798 		send_timeout = _sendtimeout;
   797 		read_timeout = _readtimeout;
   799 		read_timeout = _readtimeout;
   798 		max_connections = _maxselectlen;
   800 		max_connections = _maxselectlen;
   799 		max_ssl_handshake_roundtrips = _maxsslhandshake;
   801 		max_ssl_handshake_roundtrips = _maxsslhandshake;
   800 		highest_allowed_fd = _maxfd;
   802 		highest_allowed_fd = _maxfd;
       
   803 		accept_retry_interval = _accepretry;
   801 	}
   804 	}
   802 end
   805 end
   803 
   806 
   804 changesettings = function( new )
   807 changesettings = function( new )
   805 	if type( new ) ~= "table" then
   808 	if type( new ) ~= "table" then
   811 	_maxreadlen = tonumber( new.max_receive_buffer_size ) or _maxreadlen
   814 	_maxreadlen = tonumber( new.max_receive_buffer_size ) or _maxreadlen
   812 	_checkinterval = tonumber( new.select_idle_check_interval ) or _checkinterval
   815 	_checkinterval = tonumber( new.select_idle_check_interval ) or _checkinterval
   813 	_tcpbacklog = tonumber( new.tcp_backlog ) or _tcpbacklog
   816 	_tcpbacklog = tonumber( new.tcp_backlog ) or _tcpbacklog
   814 	_sendtimeout = tonumber( new.send_timeout ) or _sendtimeout
   817 	_sendtimeout = tonumber( new.send_timeout ) or _sendtimeout
   815 	_readtimeout = tonumber( new.read_timeout ) or _readtimeout
   818 	_readtimeout = tonumber( new.read_timeout ) or _readtimeout
       
   819 	_accepretry = tonumber( new.accept_retry_interval ) or _accepretry
   816 	_maxselectlen = new.max_connections or _maxselectlen
   820 	_maxselectlen = new.max_connections or _maxselectlen
   817 	_maxsslhandshake = new.max_ssl_handshake_roundtrips or _maxsslhandshake
   821 	_maxsslhandshake = new.max_ssl_handshake_roundtrips or _maxsslhandshake
   818 	_maxfd = new.highest_allowed_fd or _maxfd
   822 	_maxfd = new.highest_allowed_fd or _maxfd
   819 	return true
   823 	return true
   820 end
   824 end
   897 				if t then next_timer_time = math_min(next_timer_time, t); end
   901 				if t then next_timer_time = math_min(next_timer_time, t); end
   898 			end
   902 			end
   899 			_timer = _currenttime
   903 			_timer = _currenttime
   900 		else
   904 		else
   901 			next_timer_time = next_timer_time - (_currenttime - _timer);
   905 			next_timer_time = next_timer_time - (_currenttime - _timer);
       
   906 		end
       
   907 
       
   908 		for server, paused_time in pairs( _fullservers ) do
       
   909 			if _currenttime - paused_time > _accepretry then
       
   910 				_fullservers[ server ] = nil;
       
   911 				server.resume();
       
   912 			end
   902 		end
   913 		end
   903 
   914 
   904 		-- wait some time (0 by default)
   915 		-- wait some time (0 by default)
   905 		socket_sleep( _sleeptime )
   916 		socket_sleep( _sleeptime )
   906 	until quitting;
   917 	until quitting;