Address already in use



  • Hallo zusammen,

    Kein unbekanntes Problem und trotzdem habe ich keine funktionierende Lösung gefunden. Ich lasse meinen PC mit einem Roboter quatschen. Der Roboter ist Client und lauscht immer auf dem gleichen Port (kann ich nicht verändern). Nun bricht mir der Prozess des öfteren ab. Ich habe im Destructor von meiner Server-Klasse zwar den close(socket)-Befehl stehen, weiß aber nicht ob dieser auch ausgeführt wird. Außerdem ist es ziemlich sicher das der Client keinen Abbruch schickt. Gibt es eine Möglichkeit wie ich die beiden wieder Reconnecte ohne 5 Minuten warten zu müßen?

    Gruss,
    flambert



  • hallo,
    deine Aussage widerspricht sich etwas. Wenn der Roboter auf einem Port lauscht ist er nicht der Client sondern der Server. Das Problem Address already in use lässt sich beim Server lösen, indem man bei dem lauschenden Socket die Option SO_REUSEADDR aktiviert. Schau dir dazu die Funktion setsockopt() an.

    blan



  • Hast recht. Das mit dem Lauschen war unsinn. Der Roboter kennt den Port (6008) vom Server und verbindet sich zu diesem. Das mit dem SO_REUSEADDR funktioniert (wenn ich das richtig verstanden habe) nur wenn man den Port wechselt. Das kann ich aber nicht weil der Port beim Roboter hardcodiert ist.



  • hi,
    das funktioniert auch - und vor allem dann - wenn du den gleichen Port wieder verwendest. Sonst gibts es ja auch kein Sinn. Wenn man den Port auf einen unbenutzten wechselt braucht man die Option doch gar nicht. Die Option bringt natürlich nichts, wenn ein anderes Programm den Port noch aktiv benutzt.

    Edit: Post doch mal den entsprechenden Code, wenn es möglich ist (Code-Tags nicht vergessen)

    blan


Anmelden zum Antworten