summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/network/network.cpp13
-rw-r--r--src/network/network_func.h2
-rw-r--r--src/network/network_udp.cpp11
-rw-r--r--src/network/network_udp.h2
4 files changed, 17 insertions, 11 deletions
diff --git a/src/network/network.cpp b/src/network/network.cpp
index 3965d8ef7..d2d276495 100644
--- a/src/network/network.cpp
+++ b/src/network/network.cpp
@@ -586,7 +586,7 @@ static void NetworkClose()
closesocket(s->second);
}
_listensockets.Clear();
- DEBUG(net, 1, "Closed listener");
+ DEBUG(net, 1, "[tcp] closed listeners");
}
TCPConnecter::KillAll();
@@ -813,8 +813,11 @@ void NetworkReboot()
NetworkClose();
}
-/* We want to disconnect from the host/clients */
-void NetworkDisconnect()
+/**
+ * We want to disconnect from the host/clients.
+ * @param blocking whether to wait till everything has been closed
+ */
+void NetworkDisconnect(bool blocking)
{
if (_network_server) {
NetworkClientSocket *cs;
@@ -824,7 +827,7 @@ void NetworkDisconnect()
}
}
- if (_settings_client.network.server_advertise) NetworkUDPRemoveAdvertise();
+ if (_settings_client.network.server_advertise) NetworkUDPRemoveAdvertise(blocking);
DeleteWindowById(WC_NETWORK_STATUS_WINDOW, 0);
@@ -1104,7 +1107,7 @@ void NetworkStartUp()
/** This shuts the network down */
void NetworkShutDown()
{
- NetworkDisconnect();
+ NetworkDisconnect(true);
NetworkUDPClose();
DEBUG(net, 3, "[core] shutting down network");
diff --git a/src/network/network_func.h b/src/network/network_func.h
index 88a4329a4..37e19b4d6 100644
--- a/src/network/network_func.h
+++ b/src/network/network_func.h
@@ -30,7 +30,7 @@ void NetworkUpdateClientName();
bool NetworkCompanyHasClients(CompanyID company);
bool NetworkChangeCompanyPassword(byte argc, char *argv[]);
void NetworkReboot();
-void NetworkDisconnect();
+void NetworkDisconnect(bool blocking = false);
void NetworkGameLoop();
void NetworkUDPGameLoop();
void NetworkUDPCloseAll();
diff --git a/src/network/network_udp.cpp b/src/network/network_udp.cpp
index 74c732710..efb8883be 100644
--- a/src/network/network_udp.cpp
+++ b/src/network/network_udp.cpp
@@ -58,7 +58,7 @@ DEF_UDP_RECEIVE_COMMAND(Master, PACKET_UDP_MASTER_ACK_REGISTER)
DEBUG(net, 2, "[udp] advertising on master server successful");
/* We are advertised, but we don't want to! */
- if (!_settings_client.network.server_advertise) NetworkUDPRemoveAdvertise();
+ if (!_settings_client.network.server_advertise) NetworkUDPRemoveAdvertise(false);
}
DEF_UDP_RECEIVE_COMMAND(Master, PACKET_UDP_MASTER_SESSION_KEY)
@@ -474,13 +474,16 @@ void NetworkUDPRemoveAdvertiseThread(void *pntr)
_network_udp_mutex->EndCritical();
}
-/* Remove our advertise from the master-server */
-void NetworkUDPRemoveAdvertise()
+/**
+ * Remove our advertise from the master-server.
+ * @param blocking whether to wait until the removal has finished.
+ */
+void NetworkUDPRemoveAdvertise(bool blocking)
{
/* Check if we are advertising */
if (!_networking || !_network_server || !_network_udp_server) return;
- if (!ThreadObject::New(NetworkUDPRemoveAdvertiseThread, NULL)) {
+ if (blocking || !ThreadObject::New(NetworkUDPRemoveAdvertiseThread, NULL)) {
NetworkUDPRemoveAdvertiseThread(NULL);
}
}
diff --git a/src/network/network_udp.h b/src/network/network_udp.h
index 57a29a49c..ac1a131b7 100644
--- a/src/network/network_udp.h
+++ b/src/network/network_udp.h
@@ -12,7 +12,7 @@ void NetworkUDPSearchGame();
void NetworkUDPQueryMasterServer();
void NetworkUDPQueryServer(NetworkAddress address, bool manually = false);
void NetworkUDPAdvertise();
-void NetworkUDPRemoveAdvertise();
+void NetworkUDPRemoveAdvertise(bool blocking);
void NetworkUDPClose();
#endif /* ENABLE_NETWORK */