#include "Internal.h" #include #include 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; }