Skip to content

Instantly share code, notes, and snippets.

@a2gs
Created February 20, 2019 01:34
Show Gist options
  • Save a2gs/ed284e8728987d94b07264181d72433e to your computer and use it in GitHub Desktop.
Save a2gs/ed284e8728987d94b07264181d72433e to your computer and use it in GitHub Desktop.
getaddrinfo(3) usage
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <netdb.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <arpa/inet.h>
#define ADDSZ (50)
int main(int argc, char **argv)
{
struct addrinfo hints, *res = NULL, *rp = NULL;
int getaddrinfoError = 0;
char addrStrDest[ADDSZ] = {0};
void *addrStrOrig = NULL;
if(argc != 3){
printf("Usage: %s <ADDRESS> <PORT (can be '')\n", argv[0]);
return(-1);
}
memset (&hints, 0, sizeof (hints));
hints.ai_family = AF_UNSPEC;
hints.ai_socktype = SOCK_STREAM;
hints.ai_flags |= AI_CANONNAME;
getaddrinfoError = getaddrinfo(argv[1], argv[2], &hints, &res);
if(getaddrinfoError != 0){
printf("ERRO getaddrinfo(): [%s]\n", gai_strerror(getaddrinfoError));
return(-1);
}
for(rp = res; rp != NULL; rp = rp->ai_next){
if(rp->ai_family == AF_INET) addrStrOrig = &((struct sockaddr_in *) rp->ai_addr)->sin_addr;
else if(rp->ai_family == AF_INET6) addrStrOrig = &((struct sockaddr_in6 *) rp->ai_addr)->sin6_addr;
else addrStrOrig = NULL;
inet_ntop(rp->ai_family, addrStrOrig, addrStrDest, ADDSZ);
printf("IPv%d: %s - %s\n", rp->ai_family == AF_INET6 ? 6 : 4, addrStrDest, rp->ai_canonname);
}
freeaddrinfo(res);
return(0);
}
@a2gs
Copy link
Author

a2gs commented Feb 20, 2019

gcc -o getaddrinfo getaddrinfo.c -g -std=c11 -Wall -Wextra -D_XOPEN_SOURCE=700 -D_POSIX_C_SOURCE=200809L -D_POSIX_SOURCE=1 -D_DEFAULT_SOURCE=1 -D_GNU_SOURCE=1

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