05.11.2013 Aufrufe

Zahn - Unix-Netzwerkprogramminerung mit Threads, Sockets und SSL

Zahn - Unix-Netzwerkprogramminerung mit Threads, Sockets und SSL

Zahn - Unix-Netzwerkprogramminerung mit Threads, Sockets und SSL

MEHR ANZEIGEN
WENIGER ANZEIGEN

Erfolgreiche ePaper selbst erstellen

Machen Sie aus Ihren PDF Publikationen ein blätterbares Flipbook mit unserer einzigartigen Google optimierten e-Paper Software.

230 4 Gr<strong>und</strong>lagen der Socket-Programmierung<br />

Tabelle 4.8. getaddrinfo(): Das ai_flags-Element der hints-Struktur<br />

AI PASSIVE Die Funktion soll Adreßinformationen für ein<br />

passive open liefern.<br />

AI CANONNAME Der kanonische Rechnername soll er<strong>mit</strong>telt werden.<br />

AI NUMERICHOST Unterdrückt die Namensauflösung für den Rechnernamen.<br />

AI NUMERICSERV Unterdrückt die Namensauflösung für den Servicenamen.<br />

AI V4MAPPED Liefert IPv4-gemappte IPv6-Adressen, falls AF INET6<br />

ausgewählt ist <strong>und</strong> keine IPv6-Adressen existieren.<br />

AI ALL zusätzlich zu AI V4MAPPED; Liefert IPv4-gemappte IPv6-Adressen<br />

zusätzlich zu IPv6-Adressen, falls AF INET6 ausgewählt ist.<br />

AI ADDRCONFIG Liefert IPv4/IPv6-Adressen abhängig davon, ob lokal ein<br />

konfiguriertes IPv4/IPv6-Interface existiert<br />

bzw. IN6ADDR_ANY_INIT (für IPv6) gesetzt. Hat der Parameter nodename<br />

einen Wert ungleich NULL, so wird das AI_PASSIVE-Flag ignoriert. Ist dagegen<br />

das AI_PASSIVE-Flag nicht gesetzt, so soll die zurückgelieferte Adreßinformation<br />

für einen späteren Aufruf der Funktionen connect(), sendto(), oder<br />

sendmsg() ausgelegt sein. Aus diesem Gr<strong>und</strong> wird, sofern nodename den Wert<br />

NULL hat, in der addrinfo-Struktur die Loopback-Adresse zurückgegeben.<br />

Ist im ai_flags-Element des hints-Parameters das Flag AI_NUMERICHOST gesetzt,<br />

so umgeht die getaddrinfo()-Funktion für Rechnernamen jede Form<br />

der Namensauflösung. Dies bedeutet gleichzeitig, daß der Parameter nodename<br />

eine gültige IP-Adresse (<strong>und</strong> keinen IP-Namen!) enthalten muß. Analog unterbindet<br />

das Flag AI_NUMERICSERV, die Namensauflösung für Servicenamen, so<br />

daß hier der Parameter servname beim Aufruf eine Portnummer (<strong>und</strong> keinen<br />

Servicenamen!) enthalten muß.<br />

Die Flags AI_V4MAPPED, AI_ALL, <strong>und</strong> AI_ADDRCONFIG bestimmen das Verhalten<br />

der getaddrinfo()-Funktion in IPv4/IPv6-Umgebungen. Ist für das<br />

Strukturelement ai_family der Wert AF_INET6 gesetzt <strong>und</strong> enthält ai_flags<br />

das Flag AI_V4MAPPED <strong>und</strong> kann nur eine IPv4-Adresse <strong>und</strong> keine echte“ ”<br />

IPv6-Adresse gef<strong>und</strong>en werden, so liefert getaddrinfo() eine IPv4-gemappte<br />

IPv6-Adresse. Sind die beiden Flags AI_V4MAPPED <strong>und</strong> AI_ALL gesetzt <strong>und</strong><br />

ist AF_INET6 für ai_family ausgewählt, so enthält die Ergebnisliste res alle<br />

gef<strong>und</strong>enen IPv6-Adressen <strong>und</strong> darüber hinaus auch alle gef<strong>und</strong>enen IPv4-<br />

Adressen als IPv4-gemappte IPv6-Adressen. 32 Ist das AI_ADDRCONFIG-Flag<br />

gesetzt, dann werden IPv4-Adressen nur dann zurückgeliefert, wenn auf dem<br />

lokalen System auch ein Netzwerk-Interface <strong>mit</strong> IPv4-Adresse konfiguriert ist.<br />

Analog werden IPv6-Adressen nur dann zurückgeliefert, wenn ein Netzwerk-<br />

Interface <strong>mit</strong> IPv6-Adresse konfiguriert ist.<br />

Ist im ai_flags-Element des hints-Parameters schließlich das AI_CANONNAME-<br />

Flag gesetzt, so ist im ersten Element der Ergebnisliste das Strukturelement<br />

32 Falls AI_ALL in ai_flags gesetzt ist, aber das AI_V4MAPPED-Flag nicht gesetzt ist,<br />

wird das AI_ALL-Flag ignoriert.

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!