이 스택 추적 스 니펫이 주어지면
원인 : java.net.SocketException : 소프트웨어로 인한 연결 중단 :
java.net.SocketOutputStream.socketWrite0 (네이티브 메소드)에서 소켓 쓰기 오류
나는 다음과 같은 질문에 대답하려고 노력했다.
- 어떤 예외가이 예외를 던지고 있습니까? (JVM? / Tomcat? / 내 코드?)
- 이 예외가 발생하는 원인은 무엇입니까?
# 1에 관하여 :
Sun의 JVM 소스에는이 정확한 메시지가 포함되어 있지 않지만 소프트웨어에서 연결 중단을 일으킨 텍스트 : 소켓 쓰기 오류 는 다음과 같은 기본 구현에서 발생 했다고 생각합니다 SocketOutputStream
.
private native void socketWrite0(FileDescriptor fd, byte[] b, int off,
int len) throws IOException;
# 2에 대하여
내 생각에 그것은 전체 응답을 받기 전에 클라이언트가 연결을 종료했을 때 발생합니다 (예 : 요청을 보냈지 만 전체 응답을 받기 전에 닫히거나 종료 / 오프라인 상태)
질문 :
- 위의 가정이 맞습니까 (# 1 및 # 2)?
- " 서버 측 의 네트워크 오류로 인해 클라이언트에 쓸 수 없습니다"라는 상황에서이를 구별 할 수 있습니까 ? 또는 동일한 오류 메시지가 표시됩니까?
- 그리고 가장 중요한 : 위의 내용을 명시한 공식 문서 (예 : Sun)가 있습니까?
이 스택 추적이 소켓 클라이언트의 "결함"이라는 증거가 필요하며 서버가이를 피하기 위해 할 수있는 일은 없습니다. (예외를 잡거나 Sun JVM SocketOutputStream 이외의 것을 사용하는 것을 제외하고는 클라이언트가 종료되었다는 사실을 실제로 피하지는 않습니다)
outs.write(audioBytes);
) 하는 동안이 예외가 발생 byte[]
합니다 OutputStream
. 사용자가 다른 메뉴를 클릭하면 (서버 요청을 보내는) 오디오가 작동하고 재생 중일 때 콘솔에서 동일한 오류가 발생합니다. 이 예외를 무시해도 안전합니까?