Oficjalne powody „Oprogramowanie spowodowało przerwanie połączenia: błąd zapisu gniazda”
Biorąc pod uwagę ten fragment śladu stosu
Przyczyna: java.net.SocketException: Oprogramowanie spowodowało przerwanie połączenia: błąd zapisu gniazda
at java.net.SocketOutputStream.socketWrite0 (Metoda natywna)
Próbowałem odpowiedzieć na następujące pytania:
Jaki kod rzuca ten wyjątek? (JVM? / Tomcat? / Mój kod?)Co powoduje wyrzucenie tego wyjątku?Odnośnie # 1:
Źródło JVM firmy Sun nie zawiera tego dokładnego komunikatu, ale myślę o tekścieOprogramowanie spowodowało przerwanie połączenia: błąd zapisu gniazda pochodzi z natywnej implementacjiSocketOutputStream
:
private native void socketWrite0(FileDescriptor fd, byte[] b, int off,
int len) throws IOException;
Odnośnie # 2
Domyślam się, że jest to spowodowane tym, że klient zakończył połączenie, zanim otrzyma pełną odpowiedź (np. Wysłał żądanie, ale przed uzyskaniem pełnej odpowiedzi, został zamknięty / zakończony / offline)
Pytania:
Czy powyższe założenia są poprawne (# 1 i # 2)?Czy można to odróżnić od sytuacji: „nie można napisać do klienta z powodu błędu sieciowego w sieciserwer strona?I najważniejsze:Czy istnieje oficjalny dokument (np. Od Słońca) zawierający powyższe informacje?Potrzebuję dowodu, że ten ślad stosu jest „błędem” klienta gniazda i że serwer nie mógł nic zrobić, aby tego uniknąć. (z wyjątkiem przechwytywania wyjątku lub korzystania z SocketOutputStream firmy innej niż Sun JVM, choć w rzeczywistości nie unikamy tego, że klient zakończył działanie)