diff --git a/OpenRA.Game/Game.cs b/OpenRA.Game/Game.cs index 721718a546..95fe03914c 100755 --- a/OpenRA.Game/Game.cs +++ b/OpenRA.Game/Game.cs @@ -308,6 +308,9 @@ namespace OpenRA public static void Disconnect() { + if (IsHost) + Server.Server.StopListening(); + orderManager.Dispose(); var shellmap = modData.Manifest.ShellmapUid; JoinLocal(); diff --git a/OpenRA.Game/Server/Server.cs b/OpenRA.Game/Server/Server.cs index 68f6d84081..02ab6fd689 100644 --- a/OpenRA.Game/Server/Server.cs +++ b/OpenRA.Game/Server/Server.cs @@ -50,6 +50,18 @@ namespace OpenRA.Server static ModData ModData; static Map Map; + public static void StopListening() + { + conns.Clear(); + GameStarted = false; + try + { + listener.Stop(); + }catch(Exception) + { + } + + } public static void ServerMain(ModData modData, Settings settings, string map) { Log.AddChannel("server", "server.log"); @@ -98,7 +110,7 @@ namespace OpenRA.Server foreach( Socket s in checkRead ) if( s == listener.Server ) AcceptConnection(); - else conns.Single( c => c.socket == s ).ReadData(); + else if (conns.Count > 0) conns.Single( c => c.socket == s ).ReadData(); if (Environment.TickCount - lastPing > MasterPingInterval * 1000) PingMasterServer();