Your Browser is not longer supported

Please use Google Chrome, Mozilla Firefox or Microsoft Edge to view the page correctly
Loading...

{{viewport.spaceProperty.prod}}

Adress-Struktur sockaddr_in6 der Adressfamilie AF_INET6

&pagelevel(5)&pagelevel

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.