mirror of
https://github.com/lsalzman/enet
synced 2024-11-21 14:29:05 -07:00
added broadcasting
This commit is contained in:
parent
59d5c26e38
commit
fd57f842d5
4 changed files with 20 additions and 8 deletions
|
@ -44,7 +44,8 @@ typedef enum
|
||||||
|
|
||||||
enum
|
enum
|
||||||
{
|
{
|
||||||
ENET_HOST_ANY = 0
|
ENET_HOST_ANY = 0, /**< specifies the default server host */
|
||||||
|
ENET_HOST_BROADCAST = 0xFFFFFFFF /**< specifies a subnet-wide broadcast */
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -52,11 +53,14 @@ enum
|
||||||
*
|
*
|
||||||
* The host must be specified in network byte-order, and the port must be in host
|
* The host must be specified in network byte-order, and the port must be in host
|
||||||
* byte-order. The constant ENET_HOST_ANY may be used to specify the default
|
* byte-order. The constant ENET_HOST_ANY may be used to specify the default
|
||||||
* server host.
|
* server host. The constant ENET_HOST_BROADCAST may be used to specify the
|
||||||
|
* broadcast address (255.255.255.255). This makes sense for enet_host_connect,
|
||||||
|
* but not for enet_host_create. Once a server responds to a broadcast, the
|
||||||
|
* address is updated from ENET_HOST_BROADCAST to the server's actual IP address.
|
||||||
*/
|
*/
|
||||||
typedef struct _ENetAddress
|
typedef struct _ENetAddress
|
||||||
{
|
{
|
||||||
enet_uint32 host; /**< may use ENET_HOST_ANY to specify default server host */
|
enet_uint32 host;
|
||||||
enet_uint16 port;
|
enet_uint16 port;
|
||||||
} ENetAddress;
|
} ENetAddress;
|
||||||
|
|
||||||
|
|
|
@ -643,11 +643,15 @@ enet_protocol_handle_incoming_commands (ENetHost * host, ENetEvent * event)
|
||||||
|
|
||||||
if (peer -> state == ENET_PEER_STATE_DISCONNECTED ||
|
if (peer -> state == ENET_PEER_STATE_DISCONNECTED ||
|
||||||
peer -> state == ENET_PEER_STATE_ZOMBIE ||
|
peer -> state == ENET_PEER_STATE_ZOMBIE ||
|
||||||
host -> receivedAddress.host != peer -> address.host ||
|
(host -> receivedAddress.host != peer -> address.host &&
|
||||||
|
peer -> address.host != ENET_HOST_BROADCAST) ||
|
||||||
header -> challenge != peer -> challenge)
|
header -> challenge != peer -> challenge)
|
||||||
return 0;
|
return 0;
|
||||||
else
|
else
|
||||||
peer -> address.port = host -> receivedAddress.port;
|
{
|
||||||
|
peer -> address.host = host -> receivedAddress.host;
|
||||||
|
peer -> address.port = host -> receivedAddress.port;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (peer != NULL)
|
if (peer != NULL)
|
||||||
|
|
4
unix.c
4
unix.c
|
@ -128,7 +128,8 @@ ENetSocket
|
||||||
enet_socket_create (ENetSocketType type, const ENetAddress * address)
|
enet_socket_create (ENetSocketType type, const ENetAddress * address)
|
||||||
{
|
{
|
||||||
ENetSocket newSocket = socket (PF_INET, type == ENET_SOCKET_TYPE_DATAGRAM ? SOCK_DGRAM : SOCK_STREAM, 0);
|
ENetSocket newSocket = socket (PF_INET, type == ENET_SOCKET_TYPE_DATAGRAM ? SOCK_DGRAM : SOCK_STREAM, 0);
|
||||||
int receiveBufferSize = ENET_HOST_RECEIVE_BUFFER_SIZE;
|
int receiveBufferSize = ENET_HOST_RECEIVE_BUFFER_SIZE,
|
||||||
|
allowBroadcasting = 1;
|
||||||
#ifndef HAS_FCNTL
|
#ifndef HAS_FCNTL
|
||||||
int nonBlocking = 1;
|
int nonBlocking = 1;
|
||||||
#endif
|
#endif
|
||||||
|
@ -146,6 +147,7 @@ enet_socket_create (ENetSocketType type, const ENetAddress * address)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
setsockopt (newSocket, SOL_SOCKET, SO_RCVBUF, (char *) & receiveBufferSize, sizeof (int));
|
setsockopt (newSocket, SOL_SOCKET, SO_RCVBUF, (char *) & receiveBufferSize, sizeof (int));
|
||||||
|
setsockopt (newSocket, SOL_SOCKET, SO_BROADCAST, (char *) & allowBroadcasting, sizeof (int));
|
||||||
}
|
}
|
||||||
|
|
||||||
if (address == NULL)
|
if (address == NULL)
|
||||||
|
|
6
win32.c
6
win32.c
|
@ -88,8 +88,9 @@ ENetSocket
|
||||||
enet_socket_create (ENetSocketType type, const ENetAddress * address)
|
enet_socket_create (ENetSocketType type, const ENetAddress * address)
|
||||||
{
|
{
|
||||||
ENetSocket newSocket = socket (PF_INET, type == ENET_SOCKET_TYPE_DATAGRAM ? SOCK_DGRAM : SOCK_STREAM, 0);
|
ENetSocket newSocket = socket (PF_INET, type == ENET_SOCKET_TYPE_DATAGRAM ? SOCK_DGRAM : SOCK_STREAM, 0);
|
||||||
u_long nonBlocking = 1,
|
u_long nonBlocking = 1;
|
||||||
receiveBufferSize = ENET_HOST_RECEIVE_BUFFER_SIZE;
|
int receiveBufferSize = ENET_HOST_RECEIVE_BUFFER_SIZE,
|
||||||
|
allowBroadcasting = 1;
|
||||||
struct sockaddr_in sin;
|
struct sockaddr_in sin;
|
||||||
|
|
||||||
if (newSocket == ENET_SOCKET_NULL)
|
if (newSocket == ENET_SOCKET_NULL)
|
||||||
|
@ -100,6 +101,7 @@ enet_socket_create (ENetSocketType type, const ENetAddress * address)
|
||||||
ioctlsocket (newSocket, FIONBIO, & nonBlocking);
|
ioctlsocket (newSocket, FIONBIO, & nonBlocking);
|
||||||
|
|
||||||
setsockopt (newSocket, SOL_SOCKET, SO_RCVBUF, (char *) & receiveBufferSize, sizeof (int));
|
setsockopt (newSocket, SOL_SOCKET, SO_RCVBUF, (char *) & receiveBufferSize, sizeof (int));
|
||||||
|
setsockopt (newSocket, SOL_SOCKET, SO_BROADCAST, (char *) & allowBroadcasting, sizeof (int));
|
||||||
}
|
}
|
||||||
|
|
||||||
memset (& sin, 0, sizeof (struct sockaddr_in));
|
memset (& sin, 0, sizeof (struct sockaddr_in));
|
||||||
|
|
Loading…
Reference in a new issue