(svn r15987) -Fix: make the master socket only listen on the IP the server is bound to.

This commit is contained in:
rubidium 2009-04-08 19:36:51 +00:00
parent 9c814d64f4
commit 08e37a6f10
3 changed files with 19 additions and 23 deletions

View File

@ -587,7 +587,7 @@ static void NetworkClose()
_listensockets.Clear();
DEBUG(net, 1, "Closed listener");
}
NetworkUDPCloseAll();
NetworkUDPClose();
TCPConnecter::KillAll();
@ -606,6 +606,7 @@ static void NetworkClose()
static void NetworkInitialize()
{
InitializeNetworkPools();
NetworkUDPInitialize();
_sync_frame = 0;
_network_first_time = true;
@ -743,6 +744,7 @@ bool NetworkServerStart()
IConsoleCmdExec("exec scripts/pre_server.scr 0");
if (_network_dedicated) IConsoleCmdExec("exec scripts/pre_dedicated.scr 0");
NetworkDisconnect();
NetworkInitialize();
if (!NetworkListen()) return false;
@ -1077,7 +1079,6 @@ void NetworkStartUp()
memset(&_network_game_info, 0, sizeof(_network_game_info));
NetworkUDPInitialize();
NetworkInitialize();
DEBUG(net, 3, "[core] network online, multiplayer available");
NetworkFindBroadcastIPs(&_broadcast_list);
@ -1087,7 +1088,6 @@ void NetworkStartUp()
void NetworkShutDown()
{
NetworkDisconnect();
NetworkUDPShutdown();
DEBUG(net, 3, "[core] shutting down network");

View File

@ -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 */

View File

@ -13,7 +13,7 @@ void NetworkUDPQueryMasterServer();
void NetworkUDPQueryServer(NetworkAddress address, bool manually = false);
void NetworkUDPAdvertise();
void NetworkUDPRemoveAdvertise();
void NetworkUDPShutdown();
void NetworkUDPClose();
#endif /* ENABLE_NETWORK */