Ich habe einen Java-Servlet, der HTTP GET-Anforderungen von einem Client verarbeitet. Nach der Bearbeitung einer Anfrage sendet er HTTP 200 OK zurück und die Antwort enthält einige hundert Bytes an Daten.
Es gibt eine spezifische Fehlerbedingung, bei der der Client zur gleichen Zeit vom Netzwerk getrennt wird, wenn die Antwort gesendet wird. Die Daten werden vom Servlet an den Ausgabestrom geschrieben und der Ausgabestrom wird gespült. Zum Zeitpunkt, wenn der Ausgabestrom gespült wird, weiß der Server nicht, dass der Client nicht verbunden ist. (Die Verbindung wurde abrupt von einem Punkt zwischen Client und Server unterbrochen, sodass der Client keine Chance hat, die TCP-Verbindung ordnungsgemäß zu schließen - kein TCP RST wird vom Server gesehen.)
Die Frage ist, gibt es einen Weg für das Servlet, diese Bedingung zu erkennen? Ich habe bereits zwei Dinge überprüft:
- Es werden keine Ausnahmen im Servlet ausgelöst. Ich hatte gehofft, dass diese Bedingung zu einer IOException führen würde, aber das scheint nicht zu passieren.
- Ich rufe PrintWriter.checkError() auf dem PrintWriter auf, der zum Schreiben an den Client verwendet wird, auf und es gibt false (keinen Fehler) zurück, selbst wenn diese Fehlerbedingung auftritt.
Soweit ich das beurteilen kann, gibt es also keinen Weg für den Server, das festzustellen. Aber es scheint mir, dass es basierend auf dem Fehlen einer Bestätigung vom TCP-Stack des Clients möglich sein sollte. Vielleicht ist dies jedoch nicht für das Servlet zugänglich.
Nicht sicher, ob es relevant ist, aber ich benutze Tomcat 7.0.26.