소켓 연결 확인하기..

소켓을 기반으로 풀링을 하는 라이브러리를 개발할 시에 보통 소켓 클래스의 isconnected 라는 상태변수를 통해서 소켓의 연결상태를 확인할 수 있으나, 정확한 정보는 아니다. 그 이유가 isconnected라는 변수는, 마지막 네트웍 이벤트를 처리한 소켓의 연결 상태이기 때문이다. 그래서 확실하게 풀을 관리하기 위해서는 네트웍 이벤트를 발생시켜서 확인하는 것이 Java에서는 해결책이라고 봐야 된다. 아래의 코드로 넌 블럭(non-block) SocketChannel을 예로, read 메서드를 호출해서 결과 값으로 상태를 확인하는 코드이다.

int  readbytes = socketChannel.read(buf);
// 연결이 되어 있음..
if(readbytes == 0)
// 끊어졌네요.
if (readbytes == -1)
// 리시브된 데이타가 있네요..
if(readbytes >0)

소켓 풀링을 관리하는 매니저 클래스가 풀에 들어있는 소켓의 read 이벤트를 주기적으로 호출해보면, socket의 연결상태를 잘 유지할 수 있을 것입니다. ^^

답글 남기기

이메일은 공개되지 않습니다. 필수 입력창은 * 로 표시되어 있습니다.