네트워크 프로그램을 하나 짜고 있는데, 이상한 현상이 발생하여서 문의를 드립니다.
부모 스레드가 port 리슨을 하고 있고, 클라이언트가 연결을 하면,
스레드를 띄워 클라이언트로 부터 주기적으로 패킷을 받습니다.
클라이언트를 처리하는 스레드는 select를 사용한 블럭킹 모드입니다.
연결을 오래 유지하는 프로그램이라 패킷을 많이 발생시키지 않도록 하기위해
select 대기 시간을 십 몇 분정도로 해서 테스트하고 있는데,
스레드를 사용한 select 대기 상태에서 클라이언트로 부터 네트워크 단절이 되는 상태로 되었을 때
스레드의 select가 timeout이 설정되었음에도 블락을 빠져나오지 않는 현상이 나타납니다.
이 블락 상태를 빠져나오도록 하기위해 다른 스레드에서 해당 스레드의 select에 패킷을 날려 read 이벤트가 발생하도록 해보았는데,
빠져나오는 경우도 있지만 아닌 경우도 있습니다.