Sockets?



  • Hallo,
    ich habe einen einfachen HTTP-Klienten mit Sockets realisiert. Der klappt soweit auch ganz gut. Leider trennt aber der Server, wenn der Socket eine lange Zeit (~2min) inaktiv war, die Verbindung, ohne den Socket zu benachrichtigen. Wenn ich nun wieder Daten zu dem Server sende, der mich schon getrennt hat, werden die Aufrufe von send und recv unendlich langsam. Wie kann ich dies ändern, so dass gleich ein Fehler zurückgegeben wird?



  • Äh. Wenn du vom Server disconnected worden bist bekommst du normal einen "connection reset by peer" Fehler. Sofort.
    Wenn das nicht funktioniert gibts irgendwo ein Problem, ne dumme Firewall, nen dummer Router, irgendwas tut nicht so wie es sollte.



  • Nein, leider nicht. Es ist schon so, wie ich es beschrieben habe!



  • lol

    Entweder ist dein Code falsch, oder der Server (bzw. eine Komponente ala Router/Firewall/... auf dem Weg zum Server) sorgt für genau dieses Verhalten, absichtlich oder weil irgendwo was kaputt/falsch konfiguriert/... ist.

    Verbindungen werden auch z.B. nicht nach 2 Minuten oder so einfach getrennt, ne TCP/IP Verbindung kann ohne weiteres Jahrelang stehen ohne dass Daten drübergeschickt werden. Vorausgesetzt das Netzwerk dazwischen ist stabil genug -- und sie geht dann auch wieder sobald man wieder was drüberschickt mit "normaler" Geschwindigkeit.

    Wenn du also noch was wissen willst schlage ich vor etwas mehr Informationen zu geben...



  • @hustbaer:
    das http protokoll basiert zwar auf TCP/IP ist aber von der eigentlichen spezifikation ein protokoll das keine dauerverbindungen vorsieht.

    sicherlich gibt es das "keep-alive" feld im HTTP header...aber dennoch kann man in http servern eine maximale zeit für solche sessions festlegen. das muss nicht unbedingt ein problem der client anwendung sein. (was nicht heisst das diese fehlerfrei programmiert sein muss)

    @sock:
    sieh doch mal bitte nach was als session timeout bzw. maximale session zeit auf deinem http server eingestellt ist. jenachdem könntest du dir das phänomen dann besser erklären.

    grützi
    RadiatioN



  • RadiatioN Offline schrieb:

    @hustbaer:
    das http protokoll basiert zwar auf TCP/IP ist aber von der eigentlichen spezifikation ein protokoll das keine dauerverbindungen vorsieht.

    sicherlich gibt es das "keep-alive" feld im HTTP header...aber dennoch kann man in http servern eine maximale zeit für solche sessions festlegen. das muss nicht unbedingt ein problem der client anwendung sein. (was nicht heisst das diese fehlerfrei programmiert sein muss)

    Ja, bloss wenn der server die Connection zudreht weils ihm zu doof wird, dann bekommt der Client das trotzdem *sofort* mit und nicht erst irgendwann. Ausgenommen eben irgendwer dazwischen stört und tut nicht so wie TCP/IP es sagt.
    Hatte ich eigentlich schon geschrieben, aber ich wiederhole mich ja gerne, hab ja sonst nix zu tun.



  • Schick mal den Code. Vielleicht is der Client mit was anderem daweil beschäftigt und checkt net das es keine Verbindung mehr gibt.

    MFG Pacino


Anmelden zum Antworten