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 251<br />

37 printf( "Thread %02d: malloc() failed.\n", tid );<br />

38 exit( EXIT_FAILURE );<br />

39 }<br />

16–39<br />

41–46<br />

Das Lasttier des Test-Clients ist die worker()-Funktion, welche die Pthreads-<br />

Startfunktion darstellt. Nach dem <strong>Threads</strong>tart bereitet die Funktion zunächst<br />

die Anfrage an den Server vor. Die erstellte Textzeile enthält die Obergrenze<br />

der zu berechnenden Primzahlen, die zu liefernde Datenmenge sowie einen<br />

Zeilenumbruch. Nachdem von den <strong>Threads</strong> ohnehin num_reqs Mal die gleiche<br />

Anfrage gestellt wird, kann das Zusammensetzen der Eingabezeile bereits im<br />

Vorfeld erfolgen. Anschließend wird vom System noch Speicherplatz für die<br />

Antwort des Servers angefordert <strong>und</strong> zudem noch ein Feld für die Zeitmessungen<br />

angelegt. Sofern die Speicheranforderungen nicht erfüllt werden können,<br />

beendet sich das gesamte Testprogramm.<br />

Danach wartet der Thread <strong>mit</strong> barrier_wait() zunächst solange, bis alle<br />

beteiligten <strong>Threads</strong> gestartet wurden <strong>und</strong> ebenfalls die Barriere barrier erreicht<br />

haben. In diesem Moment starten dann alle <strong>Threads</strong> gleichzeitig in einer<br />

Schleife <strong>mit</strong> ihren jeweils num_reqs Anfragen an den Server.<br />

Beispiel 5.7. test-cli.c, Teil 2<br />

41 /* Warten , bis alle <strong>Threads</strong> gestartet wurden */<br />

42 status = barrier_wait( &barrier );<br />

43<br />

44 /* Die geforderte Anzahl Anfragen an den Server stellen */<br />

45 for( i = 0; i < num_reqs; i++ )<br />

46 {<br />

47 /* Startzeit für Verbindungsaufbau bestimmen */<br />

48 t = times( &acct );<br />

49<br />

50 /* Neue TCP-Verbindung zum Server aufbauen */<br />

51 if( ( srv = tcp_connect( srv_host , SRVPORT ) ) < 0 )<br />

52 {<br />

53 /* Falls der Versuch fehlschlägt , nicht abbrechen */<br />

54 printf( "Thread %02d: tcp_connect() failed.\n", tid );<br />

55 exit( EXIT_FAILURE );<br />

56 }<br />

57<br />

58 /* Begrüßungsformel des Servers einlesen */<br />

59 if( readline( srv, hello, MAXLINE , &rl ) < 1 )<br />

60 {<br />

61 /* Falls der Versuch fehlschlägt , nicht abbrechen */<br />

62 printf( "Thread %02d: No server greeting.\n", tid );<br />

63 exit( EXIT_FAILURE );

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

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!