연결 상태를 정확하게 결정하려면 소켓과 능동적으로 상호 작용해야합니다. 다음은 다음과 같습니다.
데이터 교환 :
데이터를 출력 스트림에 쓰려고 시도하고 닫힌 연결을 표시 할 수있는 예외를 캡처합니다. 그러나이 접근법은 지속적으로 불필요한 트래픽을 보내고 이상적이지 않습니다.
입력/출력 차단 :
연결이 순서대로 닫히면 readline () 또는 read ()와 같은 작업을 차단하면 예측 가능한 값 (-1 또는 null)을 반환합니다. 불행히도, 연결이 갑자기 삭제되면이 메소드가시기 적절하지 않을 수 있습니다. - 읽기 시간 초과 :
읽기 시간 초과 구성은 비활성 연결을 감지하는 데 도움이 될 수 있습니다. 데이터를 수신하기 전에 시간 초과가 만료되면 연결이 손실 될 수 있습니다. - 잘못된 선택키 :
Java 7 이상에서 OP_READ와 함께 SELECT ()를 사용하면 관련 selectionKey가 무효가 될 때 닫힌 연결을 감지 할 수 있습니다. 그러나이 동작은 플랫폼 및 JRE 버전에 따라 다를 수 있습니다. - 이 메소드는 원격 피어가 올바른 연결 클로저 에티켓을 따르는 경우에만 폐쇄 연결을 즉시 감지 할 것임을 기억하십시오. 그렇지 않으면 연결이 반 집단 상태로 들어가서 탐지가 더 어려워 질 수 있습니다.