Java.net.socket 모듈을 통해 웹서버와 소켓통신을 하는 PC에서
netstat으로 확인해보니,
Close_Wait 상태인 포트들이 많이 보였다.
서비스에는 이상이 없는것 같으나,
사용자가 서비스의 특정페이지에 접속할때 ESTABLISHED 되었다가 사용자가 나가게되면
Close_Wait 상태로 있게되는데, 추후 hang up 현상이나 부하를 줄것 같아 해결이 필요했다.
결과적으로는 소스코드 문제였다.
웹서버(소켓 클라이언트) -> PC(소켓 서버) 로의 sockect 연결 후,
PC에서 while 문을 통해 input을 기다리게 되는데
클라이언트의 소켓 연결 종료 메시지를 처리하지못해 while문의 무한 loop에 빠지게 되었다.
if( input == -1 ) break;
와 같이, 클라이언트(웹서버) 가 소켓을 끊었을때 -1로 input을 받게 되는데,
이를 PC에서 처리하여 while 문에서 나오고 sockect.close() 를 진행하니 정상적으로 작동하였다.
자세한 공부 내용은 아래 사이트에 잘 정리되어있으니 참고하자.
https://tech.kakao.com/2016/04/21/closewait-timewait/
'Java' 카테고리의 다른 글
[Java] Finally block does not complete normally (0) | 2020.07.25 |
---|