mirror of https://github.com/OpenTTD/OpenTTD
Fix: "Search LAN games" used the socket after it was closed (#9437)
Every outgoing connection, either TCP or UDP, triggered NetworkInitialize(), which triggered NetworkUDPInitialize() which first closes all connections. Now the problem was that "Search LAN games" found a server, added it to the list, after which (over TCP) it queries the server. This closes all UDP sockets (as that makes sense, I guess?), while the UDP was still reading from it. Solve this by simply stop initializing UDP every time we make an outgoing TCP connection; instead only do it on start-up.pull/9441/head
parent
178ea3196b
commit
dd7f69be6e
|
@ -615,7 +615,6 @@ void NetworkClose(bool close_admins)
|
|||
static void NetworkInitialize(bool close_admins = true)
|
||||
{
|
||||
InitializeNetworkPools(close_admins);
|
||||
NetworkUDPInitialize();
|
||||
|
||||
_sync_frame = 0;
|
||||
_network_first_time = true;
|
||||
|
@ -907,6 +906,7 @@ bool NetworkServerStart()
|
|||
|
||||
NetworkDisconnect(false, false);
|
||||
NetworkInitialize(false);
|
||||
NetworkUDPInitialize();
|
||||
Debug(net, 5, "Starting listeners for clients");
|
||||
if (!ServerNetworkGameSocketHandler::Listen(_settings_client.network.server_port)) return false;
|
||||
|
||||
|
@ -1292,6 +1292,7 @@ void NetworkStartUp()
|
|||
_network_game_info = {};
|
||||
|
||||
NetworkInitialize();
|
||||
NetworkUDPInitialize();
|
||||
Debug(net, 3, "Network online, multiplayer available");
|
||||
NetworkFindBroadcastIPs(&_broadcast_list);
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue