geFORK()tes Kind schliesst fremde sockets
Jan-Benedict Glaw
jbglaw at lug-owl.de
Sam Sep 13 14:43:30 CEST 2003
On Sat, 2003-09-13 14:32:22 +0200, martin.heyer at gmx.de <martin.heyer at gmx.de>
wrote in message <30775.1063456342 at www13.gmx.net>:
> Hallo Tlug.
> Ich habe ein Serverprogramm, welches die Clients zwecks Absturzsicherheit
> mit fork() in einer extra-Routine behandelt (Wenn diese Segfaultet soll der
> Rest
> stehen bleiben).
> Diese Routine braucht eigentlich nur das Socket vom accept(), und das
> kopiert
> fork(). Dummerweise scheint der gefork()te Kindprozess beim finalen return()
>
> automatisch die anderen FDs (so auch das socket fuers listen() ) zu
> schliessen.
> (Sagt strace).
Der Kind-Prozeß kann keine FDs seines Vaters mehr schließen.
> Habe ich da eine Option (sowas wie CLOEXEC...) uebersehen oder ist das
> ganze von prinzipieller Natur?
Weder, noch. Strace einfach mal den Pappi, da ist bestimmt noch'n Bock
d'rin:)
*amkopfkratz* ...oder willst Du sowas machen:
Vater | Kind
--------------------------------+-------------
socket(); |
bind(); |
listen(); |
while(1) { |
accept(); |
fork(); |
| do_some_work();
| exit();
do_some_more_work(); |
close(); |
} |
Sowas macht man gemeinhin nicht:) Wenn man die Bearbeitung eines Clients
abgibt (z.B. an ein via fork() erzeugten Prozeß), dann sollte der
_alles_ machen, was für den Client gemacht wird...
MfG, JBG
--
Jan-Benedict Glaw jbglaw at lug-owl.de . +49-172-7608481
"Eine Freie Meinung in einem Freien Kopf | Gegen Zensur | Gegen Krieg
fuer einen Freien Staat voll Freier Bürger" | im Internet! | im Irak!
ret = do_actions((curr | FREE_SPEECH) & ~(IRAQ_WAR_2 | DRM | TCPA));
-------------- nächster Teil --------------
Ein Dateianhang mit Binärdaten wurde abgetrennt...
Dateiname : nicht verfügbar
Dateityp : application/pgp-signature
Dateigröße : 189 bytes
Beschreibung: nicht verfügbar
URL : http://www.tlug.de/pipermail/tlug_allgemein/attachments/20030913/8edb3a79/attachment.pgp