Официальные причины для «программного обеспечения вызвало прерывание соединения: ошибка записи в сокет»
Учитывая этот фрагмент трассировки стека
Вызвано: java.net.SocketException: программное обеспечение вызвало прерывание соединения: ошибка записи в сокет
в java.net.SocketOutputStream.socketWrite0 (собственный метод)
Я пытался ответить на следующие вопросы:
Какой код выдает это исключение? (JVM? / Tomcat? / Мой код?)Что вызывает это исключение?Относительно № 1:
Источник JVM от Sun не содержит этого точного сообщения, но я думаю, что текстПрограммное обеспечение вызвало прерывание соединения: ошибка записи в сокет из родной реализацииSocketOutputStream
:
private native void socketWrite0(FileDescriptor fd, byte[] b, int off,
int len) throws IOException;
Относительно № 2
Я предполагаю, что это вызвано тем, что клиент разорвал соединение до получения полного ответа (например, отправил запрос, но до получения полного ответа он был закрыт / прекращен / отключен)
Вопросов:
Верны ли вышеизложенные предположения (№ 1 и № 2)?Можно ли это дифференцировать от ситуации: «не удалось написать клиенту из-за сетевой ошибки насервер сторона "? или это будет то же сообщение об ошибке?И самое главное:Есть ли официальный документ (например, от Sun), подтверждающий вышесказанное?Мне нужно иметь доказательство того, что эта трассировка стека является "ошибкой" клиента сокета, и сервер ничего не мог бы сделать, чтобы избежать этого. (кроме перехвата исключения или использования не Sun JVM SocketOutputStream, хотя оба не избегают того факта, что клиент завершил работу)