Chapter 8. Programming
If 10 years from now, when you are doing something quick and dirty, you suddenly visualize that I am looking over your shoulders and say to yourself, "Dijkstra would not have liked this," well that would be enough immortality for me.
Edgar Dijkstra
The sockets programming interface is probably the most commonly used interface for writing TCP/IP based applications. The sockets API is largely protocol agnostic, so adding support for IPv6 has proved to be relatively easy. To prevent inconsistencies[1] between the implementations, some standards have been produced to encourage a unified API (RFC 3493 and RFC 3542).
Familiar sockets function calls such as socket
, connect
, bind
, listen
and accept
all remain unchanged, apart from the
introduction of a new address family AF_INET6
that is used instead of AF_INET
. IPv6 socket addresses are stored
using a struct
sockaddr_in6
rather than a struct
sockaddr_in
; so much is self-explanatory. More
interestingly, a struct
sockaddr_storage
is provided which is large enough to store
any protocol address. This is intended to make it easier to write
protocol-independent code. Previously, struct
sockaddr
was sometimes used for this purpose, but the size
chosen for this structure was too small on many systems.
Apart from the structures, the main change to the API for IPv6 is
the provision of functions for looking up and printing IPv6 hostnames
and addresses. The most important of these are getaddrinfo
and getnameinfo
. These are replacements ...
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.