안녕하세요. 고수님들께 질문이 있습니다. 


현재 TCP로 간단한 메시지 (일종의 ping과 같은 역할)를 하나 만들어서 전송하고 5초 이내 응답이 없으면 (TCP 자동응답)한번 더 전송한 뒤 5초 후 그래도 응답이 없다면 서버와의 연결을 끊는 간단한 프로그램을 짜고 있습니다. 트래픽을 최소화 하고자 ping  메시지만 전송하고 서버에서는 이와 대응되는 별도의 ACK을 보내지 않습니다 (즉, TCP 프로토콜 차원에서 패킷을 받았다는 자동 ACK 만 발생합니다). 

여기서 질문입니다. 제가 작성한 ping 에 대해 TCP 가 자동으로 응답하는 ACK을 검출할 방법이 없어 setSoTimeout을 사용하였는데 정확히 동작하지 않는 느낌이 듭니다. 즉, ping 전송 후 바로 read를 감시하다가 5초간 TCP ACK 이 없으면 Exception을 던져줘야 하는데 5초보다 길때도 있고 5초보다 짧을 때도 있습니다. 이럴 경우 setSoTimeout 이 구동되기 전에 TCP ACK이 송신된다면 무시되는 결과가 나타날 것 같은데요...


혹시 TCP ACK 이 검출되었을 때 이벤트를 발생시키는 함수는 없을까요?