Dado este fragmento de seguimiento de pila
Causado por: java.net.SocketException: el software provocó la cancelación de la conexión: error de escritura del socket
en java.net.SocketOutputStream.socketWrite0 (Método nativo)
Traté de responder las siguientes preguntas:
- ¿Qué código está lanzando esta excepción? (JVM? / Tomcat? / Mi código?)
- ¿Qué causa que se arroje esta excepción?
Con respecto al n. ° 1:
La fuente JVM de Sun no contiene este mensaje exacto, pero creo que el texto Software causó la cancelación de la conexión: el error de escritura del socket es de la implementación nativa de SocketOutputStream
:
private native void socketWrite0(FileDescriptor fd, byte[] b, int off,
int len) throws IOException;
Con respecto al n. ° 2
Mi conjetura es que se produce cuando el cliente ha terminado la conexión, antes de obtener la respuesta completa (por ejemplo, envió una solicitud, pero antes de obtener la respuesta completa, se cerró / terminó / desconectado)
Preguntas:
- ¿Son correctos los supuestos 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 el lado del servidor "? ¿O eso generarí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 la pila es el "error" del cliente de socket, y no hay nada que el servidor podría haber hecho para evitarlo. (excepto detectar la excepción o usar un SocketOutputStream que no sea Sun JVM, aunque ambos realmente no evitan el hecho de que el cliente haya finalizado)
outs.write(audioBytes);
) byte[]
a OutputStream
. Cuando el audio se reproduce y se reproduce, si el usuario hace clic en cualquier otro menú (que envía una solicitud del servidor), recibí el mismo error en la consola. Entonces, ¿es seguro ignorar esta excepción?