Files
CgeNet/win32/Addr.c

40 lines
1.0 KiB
C
Raw Normal View History

2026-08-08 16:00:39 +03:00
#include "Internal.h"
#include <string.h>
#include <assert.h>
int CgeNetAddrFromStr(const char *str, uint16_t port, CgeNetAddr *addr) {
struct addrinfo *result, *rp;
int code, found;
assert(str != NULL);
assert(addr != NULL);
code = getaddrinfo(str, NULL, NULL, &result);
if (code) {
return 0;
}
found = 0;
for (rp = result; rp != NULL; rp = rp->ai_next) {
if (rp->ai_family == AF_INET) {
struct sockaddr_in *sa4 = (struct sockaddr_in *)rp->ai_addr;
addr->ipv4.type = CGE_NET_IPV4;
memcpy(addr->ipv4.addr, &sa4->sin_addr, 4);
addr->ipv4.port = port;
found = 1;
break;
} else if (rp->ai_family == AF_INET6) {
struct sockaddr_in6 *sa6 = (struct sockaddr_in6 *)rp->ai_addr;
addr->ipv6.type = CGE_NET_IPV6;
memcpy(addr->ipv6.addr, &sa6->sin6_addr, 16);
addr->ipv6.port = port;
found = 1;
break;
}
}
freeaddrinfo(result);
return found;
}