소켓을 기반으로 풀링을 하는 라이브러리를 개발할 시에 보통 소켓 클래스의 isconnected 라는 상태변수를 통해서 소켓의 연결상태를 확인할 수 있으나, 정확한 정보는 아니다. 그 이유가 isconnected라는 변수는, 마지막 네트웍 이벤트를 처리한 소켓의 연결 상태이기 때문이다. 그래서 확실하게 풀을 관리하기 위해서는 네트웍 이벤트를 발생시켜서 확인하는 것이 Java에서는 해결책이라고 봐야 된다. 아래의 코드로 넌 블럭(non-block) SocketChannel을 예로, read 메서드를 호출해서 결과 값으로 상태를 확인하는 코드이다.
int readbytes = socketChannel.read(buf); // 연결이 되어 있음.. if(readbytes == 0) // 끊어졌네요. if (readbytes == -1) // 리시브된 데이타가 있네요.. if(readbytes >0)
소켓 풀링을 관리하는 매니저 클래스가 풀에 들어있는 소켓의 read 이벤트를 주기적으로 호출해보면, socket의 연결상태를 잘 유지할 수 있을 것입니다. ^^