Client-Server Problem



  • Hallo zusammen

    ich habe ein Netzwerk mit einem Server und einem Client und öfter mal das Problem, dass sich der Server verabschiedet und mein Client das nicht mitbekommt. Meine Frage: Gibt es eine einfache Möglichkeit auf seiten des Clienten festzustellen, ob der Server noch aktiv ist? Sowas wie eine Schleife die einfach alle 10sec etwas schickt und auf Antwort wartet? Mein Client läuft mit einem CAsyncSocket, leider konnte ich in der MFC-Hilfe nichts darüber finden wie ich als Client checke, ob die Verbindung noch steht. OnReceive wird ja nur aufgerufen wenn tatsächlich Daten im Buffer sind, aber die Verbindung kann ja auch stehen ohne dass Daten hin- und hergeschickt werden. Weiss von euch jemand Rat?



  • Versuch's mal mit OnClose() 😉 (zumindest passt dessen Beschreibung zu deinem Problem)



  • Danke für den Tipp. Leider habe ich das schon ausprobiert, aber die Methode OnClose() wird bei mir nie aufgerufen. Das scheint ihn gar nicht zu interessieren dass der Server nicht mehr läuft. Erst wenn ich den Server neu starte wird die Methode OnClose() aufgerufen und ich kann die Verbindung neu herstellen.



  • Ich kenne 2 Dinge die man machen kann:

    1. Mit setsockopt() SO_KEEPALIVE setzen. Allerdings ist das Default Timeout meist recht hoch, unter Windows sind es 2 Stunden. Kann AFAIK auch nur global für den ganzen Rechner in der Registry geändert werden, und nicht "on-the-fly" für einen Prozess.

    2. Den socket auf non-blocking umschalten, und dann selbst ein Timeout implementieren. Äh, ok, lese gerade CAsyncSocket - der sollte dann bereite non-blocking sein, musst du also nur noch selbst irgendein Timeout implementieren. Macht man üblicherweise indem man "dummy" Messages hin und her schickt.


Anmelden zum Antworten