From 5a3d065ab48290f175042157fe721ec5d68c35e4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Albin=20Cor=C3=A9n?= Date: Fri, 9 Mar 2018 13:37:39 +0100 Subject: [PATCH] Added hang/flood prevention to NetworkingManager --- MLAPI/Data/NetworkingConfiguration.cs | 1 + MLAPI/MonoBehaviours/Core/NetworkingManager.cs | 5 ++++- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/MLAPI/Data/NetworkingConfiguration.cs b/MLAPI/Data/NetworkingConfiguration.cs index 99209cf..fe969cb 100644 --- a/MLAPI/Data/NetworkingConfiguration.cs +++ b/MLAPI/Data/NetworkingConfiguration.cs @@ -16,6 +16,7 @@ namespace MLAPI public List RegisteredScenes = new List(); public int MessageBufferSize = 65535; public int ReceiveTickrate = 64; + public int MaxReceiveEventsPerTickRate = 500; public int SendTickrate = 64; public int EventTickrate = 64; public int MaxConnections = 100; diff --git a/MLAPI/MonoBehaviours/Core/NetworkingManager.cs b/MLAPI/MonoBehaviours/Core/NetworkingManager.cs index 32af8f6..95e1f51 100644 --- a/MLAPI/MonoBehaviours/Core/NetworkingManager.cs +++ b/MLAPI/MonoBehaviours/Core/NetworkingManager.cs @@ -312,8 +312,10 @@ namespace MLAPI if((Time.time - lastReceiveTickTime >= (1f / NetworkConfig.ReceiveTickrate)) || NetworkConfig.ReceiveTickrate <= 0) { NetworkEventType eventType; + int processedEvents = 0; do { + processedEvents++; eventType = NetworkTransport.Receive(out hostId, out clientId, out channelId, messageBuffer, messageBuffer.Length, out receivedSize, out error); NetworkError networkError = (NetworkError)error; if (networkError == NetworkError.Timeout) @@ -368,7 +370,8 @@ namespace MLAPI OnClientDisconnect(clientId); break; } - } while (eventType != NetworkEventType.Nothing); + // Only do another iteration if: there are no more messages AND (there is no limit to max events or we have processed less than the maximum) + } while (eventType != NetworkEventType.Nothing && (NetworkConfig.MaxReceiveEventsPerTickRate <= 0 || processedEvents < NetworkConfig.MaxReceiveEventsPerTickRate)); lastReceiveTickTime = Time.time; } if (isServer && ((Time.time - lastEventTickTime >= (1f / NetworkConfig.EventTickrate)) || NetworkConfig.EventTickrate <= 0))