bind und close

Hallo,

ich habe hier ein Problem wo ich nicht weiterkomme. Source kann ich nicht posten, da er der Firma gehört :D

Ich habe einen Server :

Ich übergebe einen Port,der server macht ein Bind und anschliessend mache ich ein close auf dem server socket. Nun habe ich manchmal das Problem ( wenn ich z.B. das Programm 4 oder 5 mal gestartet habe ), dass der Port dann immer noch belegt ist.

Gibt es eine andere Möglichkeit den mittels bind() belegten Port wieder freizugeben ausser close ?
 
Ich vermute mal, daß du C/C++ nutzt, hast du ja nicht mit angegeben. Außerdem vermute ich weiterhin, daß das Problem vor allem dann auftritt, wenn der Server "unerwartet" beendet wird (Crash des Servers, Beenden des Servers via Strg+C oder 'kill' o.ä.). In diesem Fall solltest du entsprechende Signalhandler einbauen, in die du dann dein close() einbaust.
Und sonst wäre eine etwas genauere Fehlerbeschreibung (wann tritt das Problem auf, wie beendest du den Server u.ä.) hilfreich.
 
Wie gesagt mehr Infos beim nächsten mal.

Lies dir man setsockopt durch was dir eventuell hilft ist das SO_REUSEADDR flag. Damit gibst du den Port zwar nicht frei aber kannst ihn wieder benutzen, das sollte dein problem wenn ich es richtig verstanden habe lösen.
 
Ja,es war gestern spät :rolleyes:


Also,C/C++ und Linux.Es gibt keinen Programmcash.Es wird ganz normal beendet, der socket wird auch geschlossen mittels close() ( es gibt eine Textausgabe ) aber manchmal kann ich kein bind() durchführen.

OS : Kubuntu Feisty Fawn
 
Hast du das mit SO_REUSEADDR mal probiert? Falls es dann immernoch nicht geht poste mal die Fehlermeldung aus strace oder direkt aus dem Programm.
 
Zurück
Oben