Razones oficiales para "Cancelación de conexión causada por software: error de escritura de socket"
Dado este fragmento de traza de pila
Causado por: java.net.SocketException: el software provocó el aborto de la conexión: error de escritura del socket
en java.net.SocketOutputStream.socketWrite0 (Método nativo)
Intenté responder las siguientes preguntas:
¿Qué código está lanzando esta excepción? (¿JVM? / ¿Tomcat? / ¿Mi código?)¿Qué causa que esta excepción sea lanzada?Respecto al # 1:
La fuente JVM de Sun no contiene este mensaje exacto, pero creo que el textoCancelación de conexión causada por software: error de escritura de socket es de la implementación nativa deSocketOutputStream
:
private native void socketWrite0(FileDescriptor fd, byte[] b, int off,
int len) throws IOException;
Respecto al # 2
Supongo que se debe a que el cliente ha finalizado la conexión, antes de obtener la respuesta completa (por ejemplo, envió una solicitud, pero antes de obtener la respuesta completa, se cerró / finalizó / se desconectó)
Preguntas:
¿Son correctas las suposiciones anteriores (# 1 y # 2)?¿Se puede diferenciar esto de la situación: "no se pudo escribir al cliente, debido a un error de red en elservidor ¿Lado "? ¿O eso haría el mismo mensaje de error?Y lo más importante:¿Hay un documento oficial (por ejemplo, de Sun) que indique lo anterior?Necesito tener una prueba de que este seguimiento de pila es la "falla" del cliente de socket, y no hay nada que el servidor pudiera haber hecho para evitarlo. (excepto la captura de la excepción, o el uso de un SocketOutputStream de Sun JVM, aunque ambos no evitan realmente el hecho de que el cliente haya terminado)