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.

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

sockaddr-Hilfsstruktur. Im Anwendungsprogramm wandelt man dazu die<br />

Adresse einer protokollspezifischen Adreßstruktur in einen sockaddr-Zeiger<br />

um. Mit Hilfe des sa_family-Elements können die Funktionen dann intern<br />

wieder den eigentlichen Strukturtyp feststellen <strong>und</strong>, nach erneuter Typumwandlung,<br />

auf die protokollspezifischen Informationen zugreifen.<br />

Allerdings stammt die Definition der sockaddr-Struktur noch aus einer Zeit<br />

weit vor dem Entwurf <strong>und</strong> der Einführung von IPv6. Deshalb wurde für<br />

IPv6 <strong>mit</strong> sockaddr_storage eine zweite generische Socket-Adreßstruktur<br />

eingeführt, die groß genug ist, um jede vom System unterstützte Socket-<br />

Adreßstruktur darin unterzubringen.<br />

#include<br />

<br />

struct sockaddr_storage<br />

{<br />

sa_family_t ss_family; /* address family AF_xyz */<br />

/*<br />

* - Large enough to accommodate all supported<br />

* protocol -specific address structures.<br />

* - Aligned at an appropriate bo<strong>und</strong>ary.<br />

*/<br />

}<br />

Wie für sockaddr gilt auch für die sockaddr_storage-Struktur, daß sie so<br />

angeordnet ist, daß ein Zeiger auf sockaddr_storage in einen Zeiger auf<br />

sockaddr_in oder sockaddr_in6 umgewandelt werden kann. Insbesondere<br />

liegt das Strukturelement ss_family, welches die Adreßfamilie anzeigt, in<br />

allen Socket-Adreßstrukturen an der selben Position.<br />

4.3.3 Client-seitiger TCP-Verbindungsaufbau<br />

Als erstes wollen wir nun versuchen, uns <strong>mit</strong> einem selbstgeschriebenen Clientprogramm<br />

zu einem TCP-Server zu verbinden. Beim verbindungsorientierten<br />

Transmission Control Protocol stellt der Client vor dem eigentlichen<br />

Datenaustausch eine Netzwerkverbindung her. Für diesen Zweck steht die<br />

connect()-Funktion zur Verfügung:<br />

#include<br />

<br />

int connect( int socket , const struct sockaddr *address ,<br />

socklen_t address_len );

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

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!