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.

282 5 Netzwerkprogrammierung in der Praxis<br />

die Verbindung zum Client. Im Gegensatz dazu schließt der neue Arbeiterprozeß<br />

als erstes den passiven Serversocket, den er bei der Kommunikation<br />

<strong>mit</strong> dem Client nicht mehr benötigt. Anschließend beantwortet der Arbeiterprozeß<br />

die Clientanfrage, schließt danach die Netzwerkverbindung zum Client<br />

<strong>und</strong> beendet sich abschließend selbst.<br />

accept(s)<br />

Serverprozeß<br />

Arbeiter<br />

Prozeß<br />

fork()<br />

close(s)<br />

close(c)<br />

close(s)<br />

Arbeiter<br />

Prozeß<br />

read(c)/write(c)<br />

read(c)/write(c)<br />

close(c)<br />

close(c)<br />

Abb. 5.8. Ablaufdiagramm eines nebenläufigen Servers <strong>mit</strong> Prozessen<br />

Im Gegensatz zu Pthreads sorgt die Kapselung der Verarbeitungsinstanzen in<br />

einen separaten Prozeß für eine strikte Entkopplung der Ressourcen. Verschiedene<br />

Clientanfragen werden in getrennten Prozessen <strong>und</strong> da<strong>mit</strong> in verschiedenen<br />

Adreßräumen isoliert behandelt. Dies macht die nebenläufigen Server <strong>mit</strong><br />

mehreren Prozessen etwas robuster als die auf Pthreads basierenden Servervarianten.<br />

Insbesondere können die einzelnen Serverinstanzen ohne weitere Vorkehrungen<br />

ihre Credentials wechseln, also etwa <strong>mit</strong> seteuid() in eine andere<br />

effektive User-ID schlüpfen, ohne dabei die anderen Instanzen zu beeinflussen.<br />

5.5.1 Anpassung der Signalbehandlung<br />

Im Vergleich zum iterativen Server aus Beispiel 5.9 muß für den nebenläufigen<br />

Server <strong>mit</strong> mehreren Prozessen die Signalbehandlungsroutine erweitert werden:<br />

Der neue Server startet für jede Netzwerkverbindung einen neuen Prozeß,<br />

der die weitere Verarbeitung übernimmt. Sobald sich ein solcher Kindprozeß

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

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!