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.

290 5 Netzwerkprogrammierung in der Praxis<br />

Serverprozeß<br />

fork()<br />

accept(s)<br />

Arbeiter<br />

Prozeß<br />

close(s)<br />

pause()<br />

close(c)<br />

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

accept(s)<br />

Arbeiter<br />

Prozeß<br />

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

close(c)<br />

Abb. 5.10. Ablaufdiagramm eines nebenläufigen Servers <strong>mit</strong> Preforking<br />

TCP-Verbindungen warten. Daß dies für mehrere <strong>Threads</strong> innerhalb eines<br />

einzigen Prozesses funktioniert, haben wir in Beispiel 5.15 bereits gesehen.<br />

Dieses Verfahren funktioniert aber aufgr<strong>und</strong> der speziellen Implementierung<br />

der Dateideskriptoren (vgl. dazu die Abschnitte 2.2.1 <strong>und</strong> 2.5.2) ebenfalls für<br />

Eltern- <strong>und</strong> Kindprozesse. Wir wir bereits in Abb. 2.9 sehen konnten, verweisen<br />

die Datei- bzw. Socketdeskriptoren in den Kindprozessen auf dieselben,<br />

vom Systemkern gepflegten Beschreibungen offener Dateien. Insofern haben<br />

selbstverständlich auch die Kindprozesse im weiteren Verlauf noch Zugriff auf<br />

diese gemeinsamen Ressourcen. 13<br />

5.6.1 Buchführende Signalbehandlung<br />

13<br />

Neben der bereits bekannten Variablen daemon_exit wird in Beispiel 5.20 eine<br />

weitere globale Variable vereinbart: Im Feld child verwaltet der Dæmonprozeß<br />

die Prozeß-IDs seiner Kindprozesse.<br />

13 Von dieser für unixtypischen Implementierung der Dateideskriptoren haben wir,<br />

ohne darüber ein Wort zu verlieren, bereits in Beispiel 5.18 Gebrauch gemacht,<br />

als z. B. der Kindprozeß die vom Elternprozeß erzeugte Clientverbindung nach<br />

dem Aufruf von fork() bearbeitet hat.

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

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!