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.

262 5 Netzwerkprogrammierung in der Praxis<br />

76<br />

77 /* Arbeit ausführen */<br />

78 eratosthenes( num_work );<br />

79<br />

80 /* Daten an Client schicken ... */<br />

81 bs = writen( client , data, num_bytes );<br />

82<br />

83 /* ... <strong>und</strong> Speicherplatz wieder freigeben */<br />

84 free( data );<br />

85<br />

86 /* Nachgezogene Behandlung von writen()-Fehlern */<br />

87 if( bs != num_bytes )<br />

88 {<br />

89 syslog( LOG_ERR , "writen() failed: %s",<br />

90 strerror( errno ) );<br />

91 break;<br />

92 }<br />

93 }<br />

94<br />

95 free( rl );<br />

96 return;<br />

97 }<br />

69–75<br />

77–93<br />

95–97<br />

Danach fordert der Dæmon vom System Speicher für die zurückzuliefernde<br />

Datenmenge an. Auch hier wird nach einer Fehlermeldung die Verbindung<br />

zum Client abgebrochen, sofern die Speicheranforderung vom System nicht<br />

erfüllt werden konnte.<br />

Jetzt kann der Server <strong>mit</strong> der geforderten Primzahlberechnung beginnen. Anschließend<br />

wird der zuvor angeforderte Speicherbereich (<strong>mit</strong> mehr oder weniger<br />

zufälligem Inhalt) durch die writen()-Funktion an den Client übertragen<br />

<strong>und</strong> danach wieder freigegeben. Ist bei der Datenübertragung ein Fehler aufgetreten,<br />

ist also der Rückgabewert von writen() ungleich der Anzahl der zu<br />

übertragenden Bytes, wird die Verbindung zum Client abgebrochen.<br />

Am Ende der Funktion wird der von readline() implizit angeforderte Speicher<br />

wieder freigegeben.<br />

5.2.3 Hilfsfunktionen zur Laufzeitmessung<br />

Die beiden Funktionen init_srv_stats() <strong>und</strong> print_srv_stats() aus Beispiel<br />

5.11 helfen dabei, auf Serverseite die für die gesamten Clientanfragen<br />

aufgebrachte CPU-Zeit zu bestimmen. Die Funktionen greifen intern auf die<br />

POSIX-Funktion times() zurück, <strong>mit</strong> deren Hilfe die von einem Prozeß (<strong>und</strong>

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

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!