Study/Linux

java Socket error

LoonyHyun 2016. 3. 31. 16:20
반응형

출처 : http://www.jaso.co.kr/181


- java.net.SocketException: Connection reset by peer: socket write error
  원인: write 시 상대방 socket close 된 경우
     
- java.net.SocketException: Connection reset
  원인: read 시 상대방 socket close 된 경우 

- java.io.IOException: Broken pipe
  원인: receiver에서 송신받은 데이터를 제때 처리하지 못하는 상황(네트워크가 느리거나 서버의 CPU가 max인 경우 등)에서 sender가 계속 보내는 경우

결론적으로 위의 두 종류의 Exception은 데이터를 요청한 측(브라우저 등)에서 서버에서 데이터를 다 보내기 전에 강제로 닫아 버리거나 종료해버릴때 발생하는 것이기 때문에 큰 문제는 되지 않는다. 하지만 Broken Pipe의 경우 정상적으로 데이터를 보내지만 받지 못하는 상황이 발생하기 때문에 문제가 된다.

Broken Pipe의 경우 클라이언트는 계속 해서 데이터를 보내는 것이 아니라 하나의 레코드를 보낸 다음 서버에서 정상적으로 수신했다는 신호를 받고 다시 보내는 형태로 구현하면 된다. 속도가 좀 떨어진다는 단점이....

마지막으로 Read timed out 이 발생하는 것은 Buffered 관련 기능을 사용할 경우에 많이 발생하는데, 

client/server간에 서로 신호를 주고 받으면서 read, write 하는 경우 write 한 후 flush(), 

close()를 하지 않게 되면 실제 데이터는 receiver로 전송되지 않게 된다. 

이때 receiver는 일정 시간 동안 데이터가 오지 않으면 timeout 된 것으로 간주하게 된다.

'Study > Linux' 카테고리의 다른 글

Process Thread 확인  (0) 2016.08.04
File Descriptor 확인 및 설정  (0) 2016.03.31
shell script 를 이용한 ssh/sftp 자동 로그인  (0) 2016.03.25
shell script date function  (0) 2014.03.10
shell script find command  (0) 2014.03.07