Some Simple Examples
We will now look at a few examples of code written from scratch and old code that has been updated to deal with IPv6. The examples are written for Unix-like systems, but the situation on Windows should be very similar apart from the use of Winsock2.h and Ws2tcpip.h rather than the Unix socket headers. You need to make sure you use a recent version of the Windows Platform SDK to get headers and libraries that include IPv6 support. The SDK is available from http://msdn.microsoft.com/.
Parsing and Printing Names and Addresses
In this example, we look at how you might use getaddrinfo and getnameinfo. The program in Example 8-1 reads a list of
hostnames, one per line. For each name it calls getaddrinfo with the PF_UNSPEC flag to get a list of the
addresses associated with that name. Then for each of the addresses
we call getnameinfo with the
NI_NUMERICHOST flag to convert
that address into the numeric form, rather than resolving the
address by DNS or some other method.
Example 8-1. C resolver code
#include <sys/types.h> #include <sys/socket.h> #include <ctype.h> #include <netdb.h> #include <stdio.h> #include <stdlib.h> #include <string.h> int main(int argc, char **argv) { int error; char *p, name[NI_MAXHOST], addr[NI_MAXHOST]; struct addrinfo hints, *res, *r; while (fgets(name, sizeof(name), stdin) != NULL) { /* Cut the string at first whitespace */ for (p = name; *p; p++) if (isspace(*p)) { *p = '\0'; break; } printf("%s\t", name); /* Try to look up the name ...Become an O’Reilly member and get unlimited access to this title plus top books and audiobooks from O’Reilly and nearly 200 top publishers, thousands of courses curated by job role, 150+ live events each month,
and much more.
Read now
Unlock full access