summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/network/core/udp.c51
-rw-r--r--src/network/core/udp.h4
-rw-r--r--src/network/network.c6
-rw-r--r--src/network/network.h2
-rw-r--r--src/network/network_udp.c25
-rw-r--r--src/openttd.c4
6 files changed, 48 insertions, 44 deletions
diff --git a/src/network/core/udp.c b/src/network/core/udp.c
index 2ae14d5fa..d688233b0 100644
--- a/src/network/core/udp.c
+++ b/src/network/core/udp.c
@@ -19,25 +19,6 @@
*/
/**
- * Send a packet over UDP
- * @param udp the socket to send over
- * @param p the packet to send
- * @param recv the receiver (target) of the packet
- */
-void NetworkSendUDP_Packet(SOCKET udp, Packet *p, struct sockaddr_in *recv)
-{
- int res;
-
- NetworkSend_FillPacketSize(p);
-
- /* Send the buffer */
- res = sendto(udp, p->buffer, p->size, 0, (struct sockaddr *)recv, sizeof(*recv));
-
- /* Check for any errors, but ignore it otherwise */
- if (res == -1) DEBUG(net, 1, "[udp] sendto failed with: %i", GET_LAST_ERROR());
-}
-
-/**
* Start listening on the given host and port.
* @param udp the place where the (references to the) UDP are stored
* @param host the host (ip) to listen on
@@ -92,6 +73,38 @@ bool NetworkUDPListen(SOCKET *udp, uint32 host, uint16 port, bool broadcast)
}
/**
+ * Close the given UDP socket
+ * @param udp the socket to close
+ */
+void NetworkUDPClose(SOCKET *udp)
+{
+ if (*udp == INVALID_SOCKET) return;
+
+ closesocket(*udp);
+ *udp = INVALID_SOCKET;
+}
+
+
+/**
+ * Send a packet over UDP
+ * @param udp the socket to send over
+ * @param p the packet to send
+ * @param recv the receiver (target) of the packet
+ */
+void NetworkSendUDP_Packet(SOCKET udp, Packet *p, struct sockaddr_in *recv)
+{
+ int res;
+
+ NetworkSend_FillPacketSize(p);
+
+ /* Send the buffer */
+ res = sendto(udp, p->buffer, p->size, 0, (struct sockaddr *)recv, sizeof(*recv));
+
+ /* Check for any errors, but ignore it otherwise */
+ if (res == -1) DEBUG(net, 1, "[udp] sendto failed with: %i", GET_LAST_ERROR());
+}
+
+/**
* Receive a packet at UDP level
* @param udp the socket to receive the packet on
*/
diff --git a/src/network/core/udp.h b/src/network/core/udp.h
index f927c289c..ab7682836 100644
--- a/src/network/core/udp.h
+++ b/src/network/core/udp.h
@@ -11,8 +11,10 @@
///** Sending/receiving of UDP packets **////
-void NetworkSendUDP_Packet(SOCKET udp, Packet *p, struct sockaddr_in *recv);
bool NetworkUDPListen(SOCKET *udp, uint32 host, uint16 port, bool broadcast);
+void NetworkUDPClose(SOCKET *udp);
+
+void NetworkSendUDP_Packet(SOCKET udp, Packet *p, struct sockaddr_in *recv);
void NetworkUDPReceive(SOCKET udp);
/**
diff --git a/src/network/network.c b/src/network/network.c
index c8cb85804..fd7c14c88 100644
--- a/src/network/network.c
+++ b/src/network/network.c
@@ -833,7 +833,7 @@ static void NetworkClose(void)
closesocket(_listensocket);
_listensocket = INVALID_SOCKET;
DEBUG(net, 1, "Closed listener");
- NetworkUDPClose();
+ NetworkUDPStop();
}
}
@@ -949,7 +949,7 @@ bool NetworkClientConnectGame(const char *host, uint16 port)
_network_last_port = port;
NetworkDisconnect();
- NetworkUDPClose();
+ NetworkUDPStop();
NetworkInitialize();
// Try to connect
@@ -1426,7 +1426,7 @@ void NetworkStartUp(void)
void NetworkShutDown(void)
{
NetworkDisconnect();
- NetworkUDPClose();
+ NetworkUDPStop();
DEBUG(net, 3, "[core] shutting down network");
diff --git a/src/network/network.h b/src/network/network.h
index 779fe393e..0bd65c0b6 100644
--- a/src/network/network.h
+++ b/src/network/network.h
@@ -179,7 +179,7 @@ void UpdateNetworkGameWindow(bool unselect);
void CheckMinPlayers(void);
void NetworkStartUp(void);
-void NetworkUDPClose(void);
+void NetworkUDPStop(void);
void NetworkShutDown(void);
void NetworkGameLoop(void);
void NetworkUDPGameLoop(void);
diff --git a/src/network/network_udp.c b/src/network/network_udp.c
index 6e8fd2a59..f64ebc2b9 100644
--- a/src/network/network_udp.c
+++ b/src/network/network_udp.c
@@ -446,30 +446,19 @@ void NetworkHandleUDPPacket(SOCKET udp, Packet *p, struct sockaddr_in *client_ad
// Close UDP connection
-void NetworkUDPClose(void)
+void NetworkUDPStop(void)
{
DEBUG(net, 1, "[udp] closed listeners");
if (_network_udp_server) {
- if (_udp_server_socket != INVALID_SOCKET) {
- closesocket(_udp_server_socket);
- _udp_server_socket = INVALID_SOCKET;
- }
-
- if (_udp_master_socket != INVALID_SOCKET) {
- closesocket(_udp_master_socket);
- _udp_master_socket = INVALID_SOCKET;
- }
-
- _network_udp_server = false;
- _network_udp_broadcast = 0;
+ NetworkUDPClose(&_udp_server_socket);
+ NetworkUDPClose(&_udp_master_socket);
} else {
- if (_udp_client_socket != INVALID_SOCKET) {
- closesocket(_udp_client_socket);
- _udp_client_socket = INVALID_SOCKET;
- }
- _network_udp_broadcast = 0;
+ NetworkUDPClose(&_udp_client_socket);
}
+
+ _network_udp_server = false;
+ _network_udp_broadcast = 0;
}
// Broadcast to all ips
diff --git a/src/openttd.c b/src/openttd.c
index cbea7485f..2208fd3cf 100644
--- a/src/openttd.c
+++ b/src/openttd.c
@@ -747,10 +747,10 @@ void SwitchMode(int new_mode)
if (_networking) {
if (_network_server && (new_mode == SM_LOAD || new_mode == SM_NEWGAME)) {
NetworkReboot();
- NetworkUDPClose();
+ NetworkUDPStop();
} else {
NetworkDisconnect();
- NetworkUDPClose();
+ NetworkUDPStop();
}
}