PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Socket schließen



7.e.Q
15-02-2005, 07:33
Hallo,

ich möchte einen TCP-Listen Socket so weit schließen, daß ein unmittelbar darauf neu erstellter Socket auf der selben Adresse und dem selben Port keine Probleme beim bind() oder listen() macht.

Momentan ist es noch so, daß ich nur ein close() auf dem Socket-FD mache und unmittelbar danach einen neuen Socket mit socket() erstelle, ihn mit bind() auf die Adresse binde und mit listen() in den Lauschmodus versetze. Problem ist: bind() schlägt fehl.

Beim ersten Erstellen des Servers klappt das noch.

Reicht es nicht aus, den Filedeskriptor mit close() zu schließen?

7.e.Q
15-02-2005, 09:09
Andere Frage zum Thema Socket schließen:

ich lege einen Kindprozess in einem Programm an. Dieser Kindprozess soll die offenen Server-Sockets des Parents NICHT (!!!) erben. Darum soll der Kindprozess kurz nach dem Start die vererbten Filedeskriptoren unbedingt schließen. Das scheint aber nicht zu gehen. Wenn ich mir die Ausgabe von netstat -na anschaue, sieht das aufs wesentliche reduziert so aus:



Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 0 0.0.0.0:23000 0.0.0.0:* LISTEN
tcp 1 0 136.1.255.33:23000 136.1.255.1:4549 CLOSE_WAIT


der erste Eintrag 0.0.0.0:23000 ist der Serversocket im Parentprozess. Der zweite Eintrag ist der selbe Socket im Kindprozess, den ich schließen möchte. Die Statusmeldung CLOSE_WAIT sagt mir, daß die Verbindung auf der anderen Seite geschlossen wurde, und daß das System darauf wartet, daß auch der Server-Socket geschlossen wird. Irgendwie geht das aber nicht. Ich rufe schon close() auf dem Socket auf. Aber nichts passiert.

Wie bekomme ich diesen Socket jetzt ganz zu und weg aus der netstat-Liste?