summaryrefslogtreecommitdiff
path: root/src/network/network_udp.cpp
diff options
context:
space:
mode:
authorrubidium <rubidium@openttd.org>2009-04-08 19:36:51 +0000
committerrubidium <rubidium@openttd.org>2009-04-08 19:36:51 +0000
commit08e37a6f1026bdb2ae28d90e605230c7f864b4b9 (patch)
tree40dc224e750c9c08a9e69b9b9b8dc8802494e77b /src/network/network_udp.cpp
parent9c814d64f4e33f0c1ebeb3d954c085a1a620ac4b (diff)
downloadopenttd-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.cpp34
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 */