7 #include <netinet/in.h>
8 #include <sys/socket.h>
11 void doit(const char *name, const char *family_name, int family)
13 printf("--- looking up '%s' for family %s (%i)\n", name, family_name, family);
15 struct addrinfo hints;
16 memset(&hints, 0, sizeof(hints));
17 hints.ai_socktype = SOCK_STREAM;
18 hints.ai_flags = AI_NUMERICHOST;
19 hints.ai_family = family;
21 struct addrinfo *hostaddr = 0;
22 int res = getaddrinfo(name, "telnet", &hints, &hostaddr);
23 if (res == EAI_NONAME) {
24 printf("getaddrinfo(...) = EAI_NONAME, trying again with AI_CANONNAME\n");
25 hints.ai_flags = AI_CANONNAME;
26 res = getaddrinfo(name, "telnet", &hints, &hostaddr);
28 if (res == EAI_NONAME) {
29 printf("getaddrinfo(...) = EAI_NONAME ... FAIL\n");
31 printf("getaddrinfo(...) = %i ... FAIL\n", res);
33 printf("getaddrinfo(...) = %i\n", res);
36 char name[1024], service[1024];
37 res = getnameinfo(hostaddr->ai_addr, hostaddr->ai_addrlen,
38 name, sizeof(name), service, sizeof(service),
39 NI_NUMERICHOST | NI_NUMERICSERV);
40 printf("getnameinfo(...) = %i\n", res);
41 printf("\tname = %s\n", name);
42 printf("\tservice = %s\n", service);
43 hostaddr = hostaddr->ai_next;
47 freeaddrinfo(hostaddr);
50 int main(int argc, char *argv[])
52 const char *name = (argc > 1 ? argv[1] : "localhost");
54 #define doit(name, family) doit(name, #family, family)