Skip to content

Instantly share code, notes, and snippets.

@jirihnidek
Last active October 31, 2023 20:09
Show Gist options
  • Star 26 You must be signed in to star a gist
  • Fork 6 You must be signed in to fork a gist
  • Save jirihnidek/bf7a2363e480491da72301b228b35d5d to your computer and use it in GitHub Desktop.
Save jirihnidek/bf7a2363e480491da72301b228b35d5d to your computer and use it in GitHub Desktop.
Example of getaddrinfo() program.
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <netdb.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <arpa/inet.h>
int
lookup_host (const char *host)
{
struct addrinfo hints, *res, *result;
int errcode;
char addrstr[100];
void *ptr;
memset (&hints, 0, sizeof (hints));
hints.ai_family = PF_UNSPEC;
hints.ai_socktype = SOCK_STREAM;
hints.ai_flags |= AI_CANONNAME;
errcode = getaddrinfo (host, NULL, &hints, &result);
if (errcode != 0)
{
perror ("getaddrinfo");
return -1;
}
res = result;
printf ("Host: %s\n", host);
while (res)
{
inet_ntop (res->ai_family, res->ai_addr->sa_data, addrstr, 100);
switch (res->ai_family)
{
case AF_INET:
ptr = &((struct sockaddr_in *) res->ai_addr)->sin_addr;
break;
case AF_INET6:
ptr = &((struct sockaddr_in6 *) res->ai_addr)->sin6_addr;
break;
}
inet_ntop (res->ai_family, ptr, addrstr, 100);
printf ("IPv%d address: %s (%s)\n", res->ai_family == PF_INET6 ? 6 : 4,
addrstr, res->ai_canonname);
res = res->ai_next;
}
freeaddrinfo(result);
return 0;
}
int main (void)
{
char inbuf[256];
int len;
do {
bzero(inbuf, 256);
printf("Type domain name:\n");
fgets(inbuf, 256, stdin);
len = strlen(inbuf);
inbuf[len-1] = '\0';
if(strlen(inbuf) > 0)
lookup_host (inbuf);
else
return EXIT_SUCCESS;
} while(1);
}
@lanurmi
Copy link

lanurmi commented Jun 5, 2023

Calling perror() is not the correct way to get an error message, because getaddrinfo() does not set errno (on most platforms anyway). gai_strerror(errcode) should be called instead on line 25.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment