Mercurial > hg > openttd
changeset 5521:828ab694b0d0 draft
(svn r7825) -Codechange: make NetworkUDPClose close a single UDP socket. Use NetworkUDPStop to close all opened udp sockets (those were called NetworkUDPClose).
author | rubidium <rubidium@openttd.org> |
---|---|
date | Thu, 04 Jan 2007 18:10:40 +0000 |
parents | 1cc3e04ea88b |
children | 8252fe7fa067 |
files | src/network/core/udp.c src/network/core/udp.h src/network/network.c src/network/network.h src/network/network_udp.c src/openttd.c |
diffstat | 6 files changed, 49 insertions(+), 45 deletions(-) [+] |
line wrap: on
line diff
--- 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 @@ } /** + * 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 */
--- a/src/network/core/udp.h +++ b/src/network/core/udp.h @@ -11,8 +11,10 @@ ///** Sending/receiving of UDP packets **//// +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); -bool NetworkUDPListen(SOCKET *udp, uint32 host, uint16 port, bool broadcast); void NetworkUDPReceive(SOCKET udp); /**
--- a/src/network/network.c +++ b/src/network/network.c @@ -833,7 +833,7 @@ closesocket(_listensocket); _listensocket = INVALID_SOCKET; DEBUG(net, 1, "Closed listener"); - NetworkUDPClose(); + NetworkUDPStop(); } } @@ -949,7 +949,7 @@ _network_last_port = port; NetworkDisconnect(); - NetworkUDPClose(); + NetworkUDPStop(); NetworkInitialize(); // Try to connect @@ -1426,7 +1426,7 @@ void NetworkShutDown(void) { NetworkDisconnect(); - NetworkUDPClose(); + NetworkUDPStop(); DEBUG(net, 3, "[core] shutting down network");
--- a/src/network/network.h +++ b/src/network/network.h @@ -179,7 +179,7 @@ void CheckMinPlayers(void); void NetworkStartUp(void); -void NetworkUDPClose(void); +void NetworkUDPStop(void); void NetworkShutDown(void); void NetworkGameLoop(void); void NetworkUDPGameLoop(void);
--- a/src/network/network_udp.c +++ b/src/network/network_udp.c @@ -446,30 +446,19 @@ // 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; - } + NetworkUDPClose(&_udp_server_socket); + NetworkUDPClose(&_udp_master_socket); + } else { + NetworkUDPClose(&_udp_client_socket); + } - _network_udp_server = false; - _network_udp_broadcast = 0; - } else { - if (_udp_client_socket != INVALID_SOCKET) { - closesocket(_udp_client_socket); - _udp_client_socket = INVALID_SOCKET; - } - _network_udp_broadcast = 0; - } + _network_udp_server = false; + _network_udp_broadcast = 0; } // Broadcast to all ips