Bei der Adressfamilie AF_INET6 besteht ein Name aus einer 16 byte langen Internet-Adresse und einer Portnummer. Für die Adressfamilie AF_INET6 verwenden Sie die Adress-Struktur sockaddr_in6. Diese Struktur besitzt zusätzliche Varianten für #define SCOPE_ID und #define SIN6_LEN.
Die Struktur sockaddr_in6 ist in der Include-Datei <netinet.in.h> wie folgt deklariert:
struct sockaddr_in6 { short sin6_family; /* Adressfamilie AF_INET6 */ u_short sin6_port; /* 16 bit Portnummer */ u_int sin6_flowinfo struct in6_addr sin6_addr; /* IPv6-Adresse */ char sin6_zero[8]; };
Strukturvariante von sockaddr_in6 mit gesetztem #define SCOPE_ID zur Unterstützung von Open Source :
struct sockaddr_in6 { short sin6_family; /* Adressfamilie AF_INET6 */ u_short sin6_port; /* 16 bit Portnummer */ u_int sin6_flowinfo struct in6_addr sin6_addr; /* IPv6-Adresse */ u_int32_t sin6_scope_id; };
Strukturvariante von sockaddr_in6 mit gesetztem #define SIN6_LEN zur Unterstützung von BSD 4.4 Systemen:
struct sockaddr_in6 { u_int8_t sin6_len; /* Länge der Struktur */ sa_family_t sin6_family; /* Adressfamilie AF_INET6 */ in_port_t sin6_port; /* 16 bit Portnummer */ u_int32_t sin6_flowinfo struct in6_addr sin6_addr; /* IPv6-Adresse */ u_int32_t sin6_scope_id; };
Mit den folgenden Anweisungen versorgen Sie eine Variable server vom Typ struct sockaddr_in6 mit einem Namen:
struct sockaddr_in6 server; struct in6_addr in6addr_any = IN6ADDR_ANY_INIT; ... server.sin6_family = AF_INET6; server.sin6_port = htons(8888); memcpy(server.sin6_addr.s6_addr, in6addr_any.s6_addr, 16);
Ein Zeiger auf die Variable server kann nun als aktueller Parameter, z.B. bei einem bind()-Aufruf, übergeben werden, um den Namen an einen Socket zu binden:
bind(..., &server, ...) /* bind()-Aufruf mit Typ-Konvertierung */
Speicherplatzzuweisung
Eine Speicherplatzzuweisung mit der dazugehörigen Initialisierung für die Variable in6addr_any muss im Code der Anwendung erfolgen. In der Include-Datei <netinet.in.h> wird die folgende Deklaration zur Verfügung gestellt:
extern const struct in6_addr in6addr_any;
in6addr_any hat den Wert ::0. In <netinet.in.h> ist eine entsprechende Konstante IN6ADDR_ANY_INIT definiert.