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.

5.1 Aufbau der Testumgebung 239<br />

19<br />

20 void daemon_init( const char *program , const char *pid_file ,<br />

21 int facility );<br />

22<br />

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

24 const char *servname );<br />

25 int tcp_listen( const char *nodename ,<br />

26 const char *servname , int backlog );<br />

27<br />

28 ssize_t readline( int fildes , void *buf, size_t nbyte ,<br />

29 void **help );<br />

30 ssize_t readn( int fildes , void *buf, size_t nbyte );<br />

31 ssize_t writen( int fildes , const void *buf, size_t nbyte );<br />

32<br />

33 void handle_client( int client );<br />

34 void init_srv_stats( void );<br />

35 void print_srv_stats( void );<br />

36<br />

37 #endif<br />

20–21<br />

23–26<br />

28–31<br />

33–35<br />

Anschließend folgen die Prototypen der Hilfsfunktionen: daemon_init() ist<br />

die Dæmon-Initialisierungsroutine, die wir in Abschnitt 2.6 entwickelt haben.<br />

Die beiden Funktionen tcp_connect() <strong>und</strong> tcp_listen(), die wir gleich besprechen<br />

werden, helfen dabei, vom Client eine Netzwerkverbindung zum Server<br />

aufzubauen bzw. einen Server an einem bestimmten Port auf eingehende<br />

Anfragen hören zu lassen.<br />

Danach vereinbaren wir drei Hilfsfunktionen für das Verschicken <strong>und</strong> Empfangen<br />

der Daten. Die beiden Funktionen readn() <strong>und</strong> writen() sind die<br />

bereits aus Abschnitt 2.2.2 bekannten Funktionen zur Ein- <strong>und</strong> Ausgabe. Die<br />

readline()-Funktion ergänzt dieses Funktionenpaar um eine Spezialfunktion,<br />

welche pro Aufruf eine komplette, durch einen Zeilenumbruch terminierte<br />

Eingabezeile zurückliefert.<br />

Die Funktion handle_client() dient schließlich dazu, die Anfrage eines<br />

Clients zu bearbeiten. Über die beiden Funktionen init_srv_stats() <strong>und</strong><br />

print_srv_stats() wird vom Server eine minimale Laufzeitstatistik erstellt<br />

<strong>und</strong> ausgegeben. Die drei Funktionen werden in den Abschnitten 5.2.2<br />

<strong>und</strong> 5.2.3 beschrieben.<br />

Die tcp_listen()-Funktion<br />

In der tcp_listen()-Funktion aus Beispiel 5.2 sind die wichtigsten Schritte<br />

für das passive Öffnen eines <strong>Sockets</strong> zusammengefaßt. Diese Arbeitsschritte<br />

durchläuft ein Server beim Programmstart typischerweise in immer der gleichen<br />

Anordnung um einen annehmenden Socket zu erstellen. Die Funktion ist

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

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!