Last active
May 24, 2021 11:09
-
-
Save oskar456/d36a39a2762472232a8d35676bd61357 to your computer and use it in GitHub Desktop.
Test getaddrinfo NAT64 synthesis on macOS
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#include <stdio.h> | |
#include <unistd.h> | |
#include <string.h> | |
#include <sys/socket.h> | |
#include <netdb.h> | |
#include <arpa/inet.h> | |
#include <err.h> | |
int main(int argc, char *argv[]) { | |
uint8_t ipv4[4] = {192, 0, 2, 1}; | |
struct addrinfo hints, *res, *res0; | |
int error, s; | |
const char *cause = NULL; | |
char ipv4_str_buf[INET_ADDRSTRLEN] = { 0 }; | |
const char *ipv4_str = inet_ntop(AF_INET, &ipv4, ipv4_str_buf, sizeof(ipv4_str_buf)); | |
memset(&hints, 0, sizeof(hints)); | |
hints.ai_family = PF_UNSPEC; | |
hints.ai_socktype = SOCK_STREAM; | |
hints.ai_flags = AI_DEFAULT; | |
error = getaddrinfo(ipv4_str, "http", &hints, &res0); | |
if (error) { | |
errx(1, "%s", gai_strerror(error)); | |
/*NOTREACHED*/ | |
} | |
s = -1; | |
for (res = res0; res; res = res->ai_next) { | |
printf("family: %d, socktype: %d\n", res->ai_family, res->ai_socktype); | |
s = socket(res->ai_family, res->ai_socktype, | |
res->ai_protocol); | |
if (s < 0) { | |
cause = "socket"; | |
continue; | |
} | |
char hbuf[NI_MAXHOST], sbuf[NI_MAXSERV]; | |
if (getnameinfo(res->ai_addr, res->ai_addrlen, hbuf, sizeof(hbuf), sbuf, | |
sizeof(sbuf), NI_NUMERICHOST | NI_NUMERICSERV)) { | |
errx(1, "could not get numeric hostname"); | |
/*NOTREACHED*/ | |
} | |
printf("host=%s, serv=%s\n", hbuf, sbuf); | |
if (connect(s, res->ai_addr, res->ai_addrlen) < 0) { | |
cause = "connect"; | |
close(s); | |
s = -1; | |
continue; | |
} | |
break; /* okay we got one */ | |
} | |
if (s < 0) { | |
err(1, "%s", cause); | |
/*NOTREACHED*/ | |
} | |
freeaddrinfo(res0); | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment