O'Reilly logo

IPv6 Network Administration by David Malone, Niall Richard Murphy

Stay ahead with the world's most comprehensive technology and business learning platform.

With Safari, you learn the way you learn best. Get unlimited access to videos, live online training, learning paths, books, tutorials, and more.

Start Free Trial

No credit card required

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 ...

With Safari, you learn the way you learn best. Get unlimited access to videos, live online training, learning paths, books, interactive tutorials, and more.

Start Free Trial

No credit card required