Port nach beenden des Servers noch belegt
-
Hi!
Wenn ich eine Server-Anwendung starte, ein paar Verbindungen aufbauen lasse und es dann mit Strg+C in der Konsole kille oder intern einfach aus main() laufen lasse, kommt es oft vor, dass der Server, wenn ich ihn gleich nochmal starten will, sagt, dass der Port bereits belegt sei (errno-Code 98 mit "Address already in use"). Nach ein paar Sekunden bis einer Minute lässt sich das Programm wieder starten und muckt nicht rum. Den Listening-Socket schließe ich vor dem Beenden des Programms im Destruktor einer Klasse.
Ist das normal?
PS: Ich das hier zwar im Linux/Unix-Forum gepostet, da es kein Netzwerk-Forum gibt, aber das Problem trat auch schon mehrfach unter Windows auf.
-
Das soll so sein. Der Port wird blockiert, falls noch Pakete für die alte Anwendung unterwegs sind.
Wenn dich das Verhalten stört, dann kannst du es aber mittels man: setsockopt(2) und der SO_REUSEADDR-Option deaktivieren.
int const one = 1; setsockopt(fd, SOL_SOCKET, SO_REUSEADDR, &one, sizeof(one));
-
Thx.