This commit is contained in:
39
win32/Addr.c
Normal file
39
win32/Addr.c
Normal file
@@ -0,0 +1,39 @@
|
||||
|
||||
#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;
|
||||
}
|
||||
Reference in New Issue
Block a user