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