(svn r7825) -Codechange: make NetworkUDPClose close a single UDP socket. Use NetworkUDPStop to close all opened udp sockets (those were called NetworkUDPClose).

This commit is contained in:
rubidium 2007-01-04 18:10:40 +00:00
parent 2fda7e6c10
commit ae9750e69b
6 changed files with 48 additions and 44 deletions

View File

@ -18,25 +18,6 @@
* @file udp.c Basic functions to receive and send UDP packets. * @file udp.c Basic functions to receive and send UDP packets.
*/ */
/**
* 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. * Start listening on the given host and port.
* @param udp the place where the (references to the) UDP are stored * @param udp the place where the (references to the) UDP are stored
@ -91,6 +72,38 @@ bool NetworkUDPListen(SOCKET *udp, uint32 host, uint16 port, bool broadcast)
return true; return true;
} }
/**
* 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 * Receive a packet at UDP level
* @param udp the socket to receive the packet on * @param udp the socket to receive the packet on

View File

@ -11,8 +11,10 @@
///** Sending/receiving of UDP packets **//// ///** 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); 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); void NetworkUDPReceive(SOCKET udp);
/** /**

View File

@ -833,7 +833,7 @@ static void NetworkClose(void)
closesocket(_listensocket); closesocket(_listensocket);
_listensocket = INVALID_SOCKET; _listensocket = INVALID_SOCKET;
DEBUG(net, 1, "Closed listener"); DEBUG(net, 1, "Closed listener");
NetworkUDPClose(); NetworkUDPStop();
} }
} }
@ -949,7 +949,7 @@ bool NetworkClientConnectGame(const char *host, uint16 port)
_network_last_port = port; _network_last_port = port;
NetworkDisconnect(); NetworkDisconnect();
NetworkUDPClose(); NetworkUDPStop();
NetworkInitialize(); NetworkInitialize();
// Try to connect // Try to connect
@ -1426,7 +1426,7 @@ void NetworkStartUp(void)
void NetworkShutDown(void) void NetworkShutDown(void)
{ {
NetworkDisconnect(); NetworkDisconnect();
NetworkUDPClose(); NetworkUDPStop();
DEBUG(net, 3, "[core] shutting down network"); DEBUG(net, 3, "[core] shutting down network");

View File

@ -179,7 +179,7 @@ void UpdateNetworkGameWindow(bool unselect);
void CheckMinPlayers(void); void CheckMinPlayers(void);
void NetworkStartUp(void); void NetworkStartUp(void);
void NetworkUDPClose(void); void NetworkUDPStop(void);
void NetworkShutDown(void); void NetworkShutDown(void);
void NetworkGameLoop(void); void NetworkGameLoop(void);
void NetworkUDPGameLoop(void); void NetworkUDPGameLoop(void);

View File

@ -446,30 +446,19 @@ void NetworkHandleUDPPacket(SOCKET udp, Packet *p, struct sockaddr_in *client_ad
// Close UDP connection // Close UDP connection
void NetworkUDPClose(void) void NetworkUDPStop(void)
{ {
DEBUG(net, 1, "[udp] closed listeners"); DEBUG(net, 1, "[udp] closed listeners");
if (_network_udp_server) { if (_network_udp_server) {
if (_udp_server_socket != INVALID_SOCKET) { NetworkUDPClose(&_udp_server_socket);
closesocket(_udp_server_socket); NetworkUDPClose(&_udp_master_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;
} else { } else {
if (_udp_client_socket != INVALID_SOCKET) { NetworkUDPClose(&_udp_client_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 // Broadcast to all ips

View File

@ -747,10 +747,10 @@ void SwitchMode(int new_mode)
if (_networking) { if (_networking) {
if (_network_server && (new_mode == SM_LOAD || new_mode == SM_NEWGAME)) { if (_network_server && (new_mode == SM_LOAD || new_mode == SM_NEWGAME)) {
NetworkReboot(); NetworkReboot();
NetworkUDPClose(); NetworkUDPStop();
} else { } else {
NetworkDisconnect(); NetworkDisconnect();
NetworkUDPClose(); NetworkUDPStop();
} }
} }