diff --git a/src/network/network.cpp b/src/network/network.cpp index 3ad86d8438..e868bbd2f5 100644 --- a/src/network/network.cpp +++ b/src/network/network.cpp @@ -937,6 +937,9 @@ void NetworkDisconnect(bool blocking) DeleteWindowById(WC_NETWORK_STATUS_WINDOW, 0); NetworkClose(); + + /* Reinitialize the UDP stack, i.e. close all existing connections. */ + NetworkUDPInitialize(); } /** diff --git a/src/openttd.cpp b/src/openttd.cpp index cf61ab9d1c..20e3bae0cc 100644 --- a/src/openttd.cpp +++ b/src/openttd.cpp @@ -877,6 +877,7 @@ bool SafeSaveOrLoad(const char *filename, int mode, GameMode newgm, Subdirectory case SL_OK: return true; case SL_REINIT: +#ifdef ENABLE_NETWORK if (_network_dedicated) { /* * We need to reinit a network map... @@ -888,6 +889,11 @@ bool SafeSaveOrLoad(const char *filename, int mode, GameMode newgm, Subdirectory MakeNewGame(false, true); return false; } + if (_network_server) { + /* We can't load the intro game as server, so disconnect first. */ + NetworkDisconnect(); + } +#endif /* ENABLE_NETWORK */ switch (ogm) { default: