일반적으로 두 소켓 간의 통신에서 애플리케이션이 계산하는 동안 사용자가 업데이트 버튼을 클릭한 후 결과를 표시하기 전 브라우저를 닫을 경우 발생한다. 즉 서버 측에서 작업 결과를 전달할 클라이언트를 못 찾을 경우 발생하는 Exception이다. 입출력이 잦을 경우에도 같은 Broken pipe가 발생할 수 있는데, 클라이언트의 요청 처리가 서버에서 끝나기도 전에 새로고침이나 업데이트 버튼을 연속으로 클릭하여 재요청을 어러번 보내는 경우 소켓이 끊어지면서 발생하기도 한다.
java.net.SocketException: Broken pipe
at java.net.SocketOutputStream.socketWrite0(Native Method)
at java.net.SocketOutputStream.socketWrite(SocketOutputStream.java:92)
at java.net.SocketOutputStream.write(SocketOutputStream.java:136)
at java.io.BufferedOutputStream.write(BufferedOutputStream.java:80)
at java.io.FilterOutputStream.write(FilterOutputStream.java:80)
at org.apache.commons.httpclient.methods.ByteArrayRequestEntity.writeRequest(ByteArrayRequestEntity.java:90)
...
비슷한 java.io.IOException: Broken pipe
클라이언트가 요청받은 응답 데이터를 타이밍에 맞춰 처리하지 못하면 발생한다.
해결 방법
1. 클라이언트에서 연속적인 버튼 클릭을 방지하여 중복 요청을 막는다.
2. 클라이언트의 종료를 서버에서 제어가 불가능하므로 Exception을 무시한다.
'개발' 카테고리의 다른 글
[오라클:Oracle] INDEX의 사용법과 좋은 인덱스(INDEX) (0) | 2022.01.13 |
---|---|
ifconfig vs ipconfig 명령어 (0) | 2022.01.12 |
connectTimeoutException:The host did not accept the connection within timeout 에러 해결 ( 방화벽 해제 ) (0) | 2021.11.22 |
java.net.UnknownHostException 에러 해결 (hosts파일 등록) (0) | 2021.11.22 |
웹 취약점이란? (보안취약점 / 해킹 / 보안) (0) | 2021.06.20 |
댓글