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

Sie wollen auch ein ePaper? Erhöhen Sie die Reichweite Ihrer Titel.

YUMPU macht aus Druck-PDFs automatisch weboptimierte ePaper, die Google liebt.

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

4.3.2 Socket-Strukturen<br />

Bei der weiteren Arbeit <strong>mit</strong> <strong>Sockets</strong> kommen einige spezielle Datenstrukturen,<br />

die Socket-Adreßstrukturen, zum Einsatz. Die sogenannte Socket-Adresse<br />

beschreibt die Verbindungscharakteristik eines <strong>Sockets</strong>. In der Netzwerkprogrammierung<br />

sind dies im Wesentlichen die IP-Adresse <strong>und</strong> die Portnummer<br />

eines <strong>Sockets</strong>.<br />

Mit Hilfe der Adreßstrukturen werden die Socket-bezogenen Informationen<br />

zwischen Anwendung <strong>und</strong> Systemkern ausgetauscht. Jedes Protokoll definiert<br />

dazu seine eigene, socketspezifische Socket-Adreßstruktur. Wir betrachten im<br />

folgenden die für die Netzwerkprogrammierung relevanten Adreßstrukturen<br />

von IPv4 <strong>und</strong> IPv6 <strong>und</strong> beleuchten deren Einsatz.<br />

IPv4 Socket-Adreßstruktur<br />

Für IPv4 wurde die Socket-Adreßstruktur sockaddr_in eingeführt. Wie in IE-<br />

EE Std 1003.1-2001 festgelegt, enthält die sockaddr_in-Struktur mindestens<br />

die Elemente sin_family, sin_port <strong>und</strong> sin_addr:<br />

#include<br />

<br />

struct sockaddr_in<br />

{<br />

sa_family_t sin_family; /* AF_INET */<br />

in_port_t sin_port; /* Port number */<br />

struct in_addr sin_addr; /* IPv4 address */<br />

}<br />

Das Strukturelement sin_addr bestimmt die IP-Adresse des <strong>Sockets</strong>. Die<br />

zugehörige in_addr-Struktur ist uns bereits aus Abschnitt 4.2.4 bekannt<br />

<strong>und</strong> nimmt die 32-Bit IPv4-Adresse in Netzwerkdarstellung auf. sin_port<br />

enthält die Portnummer des <strong>Sockets</strong>. Die Speicherung der Portnummer erfolgt<br />

wie bei der IP-Adresse in ”<br />

Network Byte Order“. Über den Inhalt von<br />

sin_family wird schließlich die Adreßfamilie des <strong>Sockets</strong> identifiziert. Die<br />

Struktur-Komponente sin_family kommt in allen Socket-Adreßstrukturen<br />

vor <strong>und</strong> gibt uns eine wertvolle Hilfestellung bei den später beschriebenen Typumwandlungen.<br />

Sinnvollerweise hat sin_family in einer IPv4 sockaddr_in-<br />

Struktur immer den Wert AF_INET.<br />

IPv6 Socket-Adreßstruktur<br />

Die eben vorgestellte Struktur sockaddr_in kann lediglich eine IPv4-Adresse<br />

aufnehmen <strong>und</strong> ist daher für <strong>Sockets</strong>, über die <strong>mit</strong> IPv6 kommuniziert werden

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

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!