diff options
author | rubidium <rubidium@openttd.org> | 2009-04-08 19:36:51 +0000 |
---|---|---|
committer | rubidium <rubidium@openttd.org> | 2009-04-08 19:36:51 +0000 |
commit | 08e37a6f1026bdb2ae28d90e605230c7f864b4b9 (patch) | |
tree | 40dc224e750c9c08a9e69b9b9b8dc8802494e77b /src/network/network_udp.cpp | |
parent | 9c814d64f4e33f0c1ebeb3d954c085a1a620ac4b (diff) | |
download | openttd-08e37a6f1026bdb2ae28d90e605230c7f864b4b9.tar.xz |
(svn r15987) -Fix: make the master socket only listen on the IP the server is bound to.
Diffstat (limited to 'src/network/network_udp.cpp')
-rw-r--r-- | src/network/network_udp.cpp | 34 |
1 files changed, 15 insertions, 19 deletions
diff --git a/src/network/network_udp.cpp b/src/network/network_udp.cpp index f9c2f98ca..c1da7df43 100644 --- a/src/network/network_udp.cpp +++ b/src/network/network_udp.cpp @@ -48,6 +48,7 @@ protected: DECLARE_UDP_RECEIVE_COMMAND(PACKET_UDP_MASTER_ACK_REGISTER); DECLARE_UDP_RECEIVE_COMMAND(PACKET_UDP_MASTER_SESSION_KEY); public: + MasterNetworkUDPSocketHandler(NetworkAddressList *addresses) : NetworkUDPSocketHandler(addresses) {} virtual ~MasterNetworkUDPSocketHandler() {} }; @@ -354,21 +355,6 @@ void ClientNetworkUDPSocketHandler::HandleIncomingNetworkGameInfoGRFConfig(GRFCo SetBit(config->flags, GCF_COPY); } -/* Close UDP connection */ -void NetworkUDPCloseAll() -{ - DEBUG(net, 1, "[udp] closed listeners"); - - _network_udp_mutex->BeginCritical(); - _udp_server_socket->Close(); - _udp_master_socket->Close(); - _udp_client_socket->Close(); - _network_udp_mutex->EndCritical(); - - _network_udp_server = false; - _network_udp_broadcast = 0; -} - /* Broadcast to all ips */ static void NetworkUDPBroadCast(NetworkUDPSocketHandler *socket) { @@ -534,6 +520,7 @@ void NetworkUDPAdvertise() void NetworkUDPInitialize() { + DEBUG(net, 1, "[udp] initializing listeners"); assert(_udp_client_socket == NULL && _udp_server_socket == NULL && _udp_master_socket == NULL); _network_udp_mutex->BeginCritical(); @@ -543,18 +530,23 @@ void NetworkUDPInitialize() _udp_client_socket = new ClientNetworkUDPSocketHandler(); _udp_server_socket = new ServerNetworkUDPSocketHandler(&server); - _udp_master_socket = new MasterNetworkUDPSocketHandler(); + + for (NetworkAddress *iter = server.Begin(); iter != server.End(); iter++) { + iter->SetPort(0); + } + _udp_master_socket = new MasterNetworkUDPSocketHandler(&server); _network_udp_server = false; _network_udp_broadcast = 0; _network_udp_mutex->EndCritical(); } -void NetworkUDPShutdown() +void NetworkUDPClose() { - NetworkUDPCloseAll(); - _network_udp_mutex->BeginCritical(); + _udp_server_socket->Close(); + _udp_master_socket->Close(); + _udp_client_socket->Close(); delete _udp_client_socket; delete _udp_server_socket; delete _udp_master_socket; @@ -562,6 +554,10 @@ void NetworkUDPShutdown() _udp_server_socket = NULL; _udp_master_socket = NULL; _network_udp_mutex->EndCritical(); + + _network_udp_server = false; + _network_udp_broadcast = 0; + DEBUG(net, 1, "[udp] closed listeners"); } #endif /* ENABLE_NETWORK */ |