net/server_select.lua
changeset 2997 6ccaefea80ec
parent 2996 b0515ed4d9d7
parent 2740 2442c54cf9ec
child 2998 36c169ed1576
equal deleted inserted replaced
2996:b0515ed4d9d7 2997:6ccaefea80ec
   428 		end
   428 		end
   429 		return noread, nosend
   429 		return noread, nosend
   430 	end
   430 	end
   431 	local _readbuffer = function( ) -- this function reads data
   431 	local _readbuffer = function( ) -- this function reads data
   432 		local buffer, err, part = receive( socket, pattern )	-- receive buffer with "pattern"
   432 		local buffer, err, part = receive( socket, pattern )	-- receive buffer with "pattern"
   433 		if not err or (err == "wantread" or err == "timeout") or string_len(part) > 0 then -- received something
   433 		if not err or (err == "wantread" or err == "timeout") or (part and string_len(part) > 0) then -- received something
   434 			local buffer = buffer or part or ""
   434 			local buffer = buffer or part or ""
   435 			local len = string_len( buffer )
   435 			local len = string_len( buffer )
   436 			if len > maxreadlen then
   436 			if len > maxreadlen then
   437 				disconnect( handler, "receive buffer exceeded" )
   437 				disconnect( handler, "receive buffer exceeded" )
   438 				handler.close( true )
   438 				handler:close( true )
   439 				return false
   439 				return false
   440 			end
   440 			end
   441 			local count = len * STAT_UNIT
   441 			local count = len * STAT_UNIT
   442 			readtraffic = readtraffic + count
   442 			readtraffic = readtraffic + count
   443 			_readtraffic = _readtraffic + count
   443 			_readtraffic = _readtraffic + count
   446 			return dispatch( handler, buffer, err )
   446 			return dispatch( handler, buffer, err )
   447 		else	-- connections was closed or fatal error
   447 		else	-- connections was closed or fatal error
   448 			out_put( "server.lua: client ", tostring(ip), ":", tostring(clientport), " read error: ", tostring(err) )
   448 			out_put( "server.lua: client ", tostring(ip), ":", tostring(clientport), " read error: ", tostring(err) )
   449 			fatalerror = true
   449 			fatalerror = true
   450 			disconnect( handler, err )
   450 			disconnect( handler, err )
   451 		_ = handler and handler.close( )
   451 		_ = handler and handler:close( )
   452 			return false
   452 			return false
   453 		end
   453 		end
   454 	end
   454 	end
   455 	local _sendbuffer = function( ) -- this function sends data
   455 	local _sendbuffer = function( ) -- this function sends data
   456 		local succ, err, byte, buffer, count;
   456 		local succ, err, byte, buffer, count;
   470 			bufferqueuelen = 0
   470 			bufferqueuelen = 0
   471 			bufferlen = 0
   471 			bufferlen = 0
   472 			_sendlistlen = removesocket( _sendlist, socket, _sendlistlen ) -- delete socket from writelist
   472 			_sendlistlen = removesocket( _sendlist, socket, _sendlistlen ) -- delete socket from writelist
   473 			_ = needtls and handler:starttls(nil, true)
   473 			_ = needtls and handler:starttls(nil, true)
   474 			_writetimes[ handler ] = nil
   474 			_writetimes[ handler ] = nil
   475 			_ = toclose and handler.close( )
   475 			_ = toclose and handler:close( )
   476 			return true
   476 			return true
   477 		elseif byte and ( err == "timeout" or err == "wantwrite" ) then -- want write
   477 		elseif byte and ( err == "timeout" or err == "wantwrite" ) then -- want write
   478 			buffer = string_sub( buffer, byte + 1, bufferlen ) -- new buffer
   478 			buffer = string_sub( buffer, byte + 1, bufferlen ) -- new buffer
   479 			bufferqueue[ 1 ] = buffer	 -- insert new buffer in queue
   479 			bufferqueue[ 1 ] = buffer	 -- insert new buffer in queue
   480 			bufferqueuelen = 1
   480 			bufferqueuelen = 1
   483 			return true
   483 			return true
   484 		else	-- connection was closed during sending or fatal error
   484 		else	-- connection was closed during sending or fatal error
   485 			out_put( "server.lua: client ", tostring(ip), ":", tostring(clientport), " write error: ", tostring(err) )
   485 			out_put( "server.lua: client ", tostring(ip), ":", tostring(clientport), " write error: ", tostring(err) )
   486 			fatalerror = true
   486 			fatalerror = true
   487 			disconnect( handler, err )
   487 			disconnect( handler, err )
   488 			_ = handler and handler.close( )
   488 			_ = handler and handler:close( )
   489 			return false
   489 			return false
   490 		end
   490 		end
   491 	end
   491 	end
   492 
   492 
   493 	-- Set the sslctx
   493 	-- Set the sslctx