From 2bc07bb50d3664b5bcd690ebdd519a3d5cae3e58 Mon Sep 17 00:00:00 2001 From: Cameron Gutman Date: Sat, 2 Apr 2016 14:04:31 -0400 Subject: [PATCH] Add enet_address_set_address() function to allow ENetAddress to be populated from sockaddr directly --- include/enet/enet.h | 1 + unix.c | 11 +++++++++++ win32.c | 11 +++++++++++ 3 files changed, 23 insertions(+) diff --git a/include/enet/enet.h b/include/enet/enet.h index 4f90b5f..a4f89f7 100644 --- a/include/enet/enet.h +++ b/include/enet/enet.h @@ -505,6 +505,7 @@ ENET_API int enet_socketset_select (ENetSocket, ENetSocketSet *, ENetSock @returns the address of the given hostName in address on success */ ENET_API int enet_address_set_host (ENetAddress * address, const char * hostName); +ENET_API int enet_address_set_address (ENetAddress * address, struct sockaddr * addr, socklen_t addrlen); ENET_API int enet_address_set_port (ENetAddress * address, enet_uint16 port); ENET_API int enet_address_equal (ENetAddress * address1, ENetAddress * address2); diff --git a/unix.c b/unix.c index a6b44f8..e928e07 100644 --- a/unix.c +++ b/unix.c @@ -158,6 +158,17 @@ enet_address_set_port (ENetAddress * address, enet_uint16 port) } } +int +enet_address_set_address (ENetAddress * address, struct sockaddr * addr, socklen_t addrlen) +{ + if (addrlen > sizeof(struct sockaddr_storage)) + return -1; + + memcpy (&address->address, addr, addrlen); + address->addressLength = addrlen; + return 0; +} + int enet_address_set_host (ENetAddress * address, const char * name) { diff --git a/win32.c b/win32.c index 9e149fc..6c9973c 100644 --- a/win32.c +++ b/win32.c @@ -80,6 +80,17 @@ enet_address_set_port (ENetAddress * address, enet_uint16 port) } } +int +enet_address_set_address (ENetAddress * address, struct sockaddr * addr, socklen_t addrlen) +{ + if (addrlen > sizeof(struct sockaddr_storage)) + return -1; + + memcpy (&address->address, addr, addrlen); + address->addressLength = addrlen; + return 0; +} + int enet_address_equal (ENetAddress * address1, ENetAddress * address2) {