나의 이해는 주로이 튜토리얼에서 유래 : 클라이언트와 서버가 서로 다른 시스템과 프록시에서 실행중인 TCP 클라이언트/서버 모델을 감안할 때소켓 작업을 사용하여 응답하지 않는 TCP 서버에 대해 알리는 방법은 무엇입니까? 소켓 프로그래밍에 대한
CS 50 Software Design and Implementation, Lecture 19, Socket Programming
그들 사이에의 가정 클라이언트가 프록시를 통해 서버에 메시지를 보낼 수 있으면 서버가 갑자기 응답하지 않게됩니다 (예를 들어 다시 설정 됨). 프록시와 서버 간의 연결은 어떻게되며 어떻게 처리 할 수 있습니까?
내 말은, 어떤 기술을 사용하여 이러한 이벤트를 감지하고 연결을 닫은 다음 클라이언트에게 오류 메시지를 반환 할 수 있습니까?
내가 생각할 수있는 한 가지 방법은 프록시에서 수신 버퍼를 확인하고 잠시 동안 데이터가없는 경우 클라이언트에게 서버가 다운되었음을 알려주는 것입니다. 하지만 시간 초과는 원시적 인 접근이라고 생각합니다. 이것을 위해 소켓 프로그래밍에서 알려진 표준 방법이나 대안이 있습니까?
클라이언트, 서버 또는 프록시를 구현하고 있습니까? 어느 쪽이든, TCP는 사용할 수있는 내장 된 keep-alive heartbeat를 가지고 있습니다. 실행중인 플랫폼에 따라'setsockopt (SOL_SOCKET, SO_KEEPALIVE)'또는'setsockopt (SOL_TCP, TCP_KEEPCNT/TCP_KEEPIDLE/TCP_KEEPINTVL)'또는'WSAIoctl (SIO_KEEPALIVE_VALS)'를 사용할 수 있습니다. 하트 비트가 실패하면 연결이 끊어졌습니다. 따라서 소켓 핸들을 닫으십시오. –
"_ 지정된 TCP 클라이언트/서버 모델 ... _"TCP에 클라이언트 또는 서버가 없습니다. 클라이언트/서버 모델은 응용 프로그램 계층 모델입니다. TCP는 피어 호스트 간의 연결을 설정합니다. –