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