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 ...
Get IPv6 Network Administration now with the O’Reilly learning platform.
O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.