ErrnoException: recvfrom failed: ETIMEDOUT

  • Hallo,


    ich bin derzeit dabei eine Android Client App zu programmieren, die sich auf einem Server anmelden soll und bestimmte Informationen abfragen soll. Das funktioniert soweit auch sehr gut, beim Login habe ich keinerlei Probleme, allerdings erhalte ich nach einer bestimmten Zeit (ca. 8-10 Minuten so wie ich gesehen habe) einen ziemlich komischen Error den ich auch nach mehreren Google Recherchen nicht erklären konnte.


    Ich programmiere derzeit mit dem Netty-Framework (Client-Server-Framework) um die Netzwerk Logik zu vereinfachen.


    Hier der Stacktrace des oben beschriebenen Fehlers:



    Leider habe ich nicht wirklich die Ahnung in welcher Relation das zum Code stehen könnte. Zur Info: Ich verbinde mich zum Server durch eine direkte IP und einen Port, nicht über einen DNS-Hostname. Ich hatte schon vermutet ob das im Zusammenhang mit dem Android DNS-Cache (Dort werden Einträge nach 10 Minuten gelöscht habe ich gelesen) stehen könnte, bin mir dabei aber nicht wirklich sicher.


    Hier meine Gerätdaten:
    Sony Xperia L
    Android 4.2.2 Jelly Bean


    Über Hilfe würde ich mich sehr freuen :)
    Danke im Voraus.

  • Aus welchen Gründen auch immer wird nach 8 bis 10 Minuten Dein Socket geschlossen, weil er in einen Timeout gelaufen ist.


    Ich vermute, dass Du die Socketverbindung öffnest, die Daten abfragst und aus Faulheit oder Unwissenheit den Socket geöffnet lässt.
    Da die nächsten 8 bis 10 Minuten nichts passiert, setzt vermutlich der Server die Socketverbindung einfach zurück.
    Der Client rechnet damit nicht und schmeißt deshalb den Fehler.


    Insofern, wenn Du kein Webbackend nutzen möchtest sondern explizit auf dem Socket arbeiten willst, solltest Du

    • den Socket öffnen, die Kommunikation abschließen und den Socket wieder schließen
      oder
    • in einem fixen Zeitintervall einen Keepalive senden, damit die Verbindung offen bleibt


    Je nachdem, was besser zu Deinem Anwendungsfall passt.

    Je mehr Käse, desto mehr Löcher.
    Je mehr Löcher, desto weniger Käse.
    Daraus folgt: je mehr Käse, desto weniger Käse.


    »Dies ist ein Forum. Schreibt Eure Fragen in das Forum, nicht per PN!«

  • Hmm, ja das könnte natürlich sein. Ich hatte auch schon die Idee den Socket nach x Minuten nach dem letzten Packet zu schließen, aber wenn ich darüber nachdenke wäre es fast besser den Socket sofort zu schließen und ihn später sofern wieder Bedarf besteht zu öffnen und sich am Server neu zu authentifizieren.


    Frage mich, warum ich nicht selbst drauf gekommen bin...


    Ich denke ich werde das so implementieren, vielen Dank für die Hilfe.

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!