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.

5.1 Aufbau der Testumgebung 243<br />

72<br />

In allen anderen Fällen konnte ein neuer passiver Socket geöffnet werden <strong>und</strong><br />

die tcp_listen()-Funktion gibt demzufolge den Socketdeskriptor des horchenden<br />

<strong>Sockets</strong> zurück.<br />

Die tcp_connect()-Funktion<br />

9–10<br />

Die tcp_connect()-Funktion aus Beispiel 5.3 stellt das Gegenstück zur oben<br />

vorgestellten tcp_listen()-Funktion dar <strong>und</strong> bildet die typischen Arbeitsschritte<br />

beim aktiven Öffnen einer TCP-Verbindung in einer kompakten Funktion<br />

ab. Mit ihrer Hilfe kann ein Client eine neue Netzwerkverbindung zum<br />

angegebenen Server aufbauen. Auch tcp_connect() basiert im Kern auf der<br />

getaddrinfo()-Funktion <strong>und</strong> ist protokollunabhängig implementiert.<br />

Die tcp_connect()-Funktion erwartet als Parameter den IP-Namen oder die<br />

IP-Adresse des zu kontaktierenden Servers sowie dessen Portnummer bzw. den<br />

zugehörigen Servicenamen. Die Funktion gibt bei Erfolg den Socketdeskriptor<br />

des neu erstellten aktiven IPv4- oder IPv6-<strong>Sockets</strong> zurück. Im Fehlerfall liefert<br />

tcp_connect() dagegen den Wert -1.<br />

1 #include <br />

2 #include <br />

3 #include <br />

4 #include <br />

5 #include <br />

Beispiel 5.3. tcp-connect.c<br />

6<br />

7 #include "server.h"<br />

8<br />

9 int tcp_connect( const char *nodename ,<br />

10 const char *servname )<br />

11 {<br />

12 int sd, status;<br />

13 struct addrinfo hints , *ai, *aptr;<br />

14<br />

15 /* Initialisierung der Hints -Adreßstruktur */<br />

16 memset( &hints , 0, sizeof( hints ) ); /* alles auf Null */<br />

17 hints.ai_family = AF_UNSPEC; /* IPv4 oder IPv6 */<br />

18 hints.ai_socktype = SOCK_STREAM; /* TCP-Socket */<br />

19<br />

20 /* Adreßstruktur(en) für aktiven Socket er<strong>mit</strong>teln */<br />

21 if( ( status = getaddrinfo( nodename , servname , &hints ,<br />

22 &ai ) ) == 0 )<br />

23 {<br />

24 for( aptr = ai; aptr != NULL; aptr = aptr->ai_next )

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

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!