Dado esse snippet de rastreamento de pilha
Causado por: java.net.SocketException: O software causou a interrupção da conexão: erro de gravação de soquete
em java.net.SocketOutputStream.socketWrite0 (método nativo)
Tentei responder às seguintes perguntas:
- Qual código está lançando essa exceção? (JVM? / Tomcat? / Meu código?)
- O que faz com que essa exceção seja lançada?
Em relação ao item 1:
A fonte JVM da Sun não contém essa mensagem exata, mas acho que o texto Software causou uma interrupção na conexão: erro de gravação de soquete é da implementação nativa de SocketOutputStream
:
private native void socketWrite0(FileDescriptor fd, byte[] b, int off,
int len) throws IOException;
Em relação a # 2
Meu palpite é que isso é causado quando o cliente encerra a conexão, antes de obter a resposta completa (por exemplo, envia uma solicitação, mas antes de obter a resposta completa, ela é fechada / finalizada / offline)
Questões:
- As premissas acima estão corretas (nº 1 e nº 2)?
- Isso pode ser diferenciado da situação: "não foi possível gravar no cliente devido a um erro de rede no servidor "? ou isso renderizaria a mesma mensagem de erro?
- E o mais importante: existe um documento oficial (por exemplo, da Sun) afirmando o acima?
Eu preciso ter uma prova de que esse rastreamento de pilha é a "falha" do cliente de soquete e não há nada que o servidor possa ter feito para evitá-lo. (exceto capturando a exceção ou usando um JVM SocketOutputStream que não seja da Sun, embora ambos não evitem o fato de o cliente ter terminado)
outs.write(audioBytes);
) byte[]
para OutputStream
. Quando o áudio está tocando e durante a reprodução, se o usuário clicar em qualquer outro menu (que envia uma solicitação do servidor), recebi o mesmo erro no console. então é seguro ignorar essa exceção?