제 질문은 TCP 연결을 만들고, 약 1 시간 동안 데이터를 전송하지 않고있을 때 이미 서버와의 연결이 끊어져 있지만 연결이 끊어 졌다는 것을 알리지 않습니다. 살아있는 패킷을 보내야합니까? 서버 ? 또는 서버에서 클라이언트로 활성 패킷을 보내야합니까? 아니면 둘 다 보내야합니까?TCP 연결을 사용하면 연결 유지 패킷을 보내야합니까?
답변
예. 며칠 전 TCP 소켓/서버 응용 프로그램을 만들었고 동일한 문제가 발생했습니다. 나는 keep alive 패킷을 보내기 시작하여 그것을 수정했다.
keep alive 패킷을 보내면 문제가 사라집니다.
내가 어떤 사람을 들었어요는 OS 보내 나는이 매우 익숙하지 않은 나는, 당신을 위해 살아 패킷을 유지하지만,
OS는 2 시간으로 기본 설정되어 있습니다. 그 기계에서 만든 모든 TCP 연결에 영향을 미치므로이 값을 변경하는 것은 바람직하지 않습니다. 대신 자신의 값을 구현하십시오. 질문은 이제 얼마나 자주 발생합니까? http://stackoverflow.com/questions/3907537/keep-alive-tcp- ip-connected-sockets-over-the-internet-when-how-and-how-much/5149662 # 5149662 – markmnl
그것은 나를 통지하지 않습니다 명시 적으로 나를 위해 일한 살아 패킷을 계속 전송하는 것을 말한다 연결이 끊어졌습니다.
수 없습니다. 다음에 I/O를 시도 할 때 EOS 또는 '연결 재설정'을 유발하는 것 이외에 다른 방법을 사용할 수 없습니다.
이 문제가 있으면 내가 킵 얼라이브 패킷을 전송해야
..., 그래. 일반적으로는 그렇지 않을 수도 있습니다.
OS가 TCP 킵 얼라이브를 보내야합니다. 그것들을 보내기 전에 오랜 시간 동안 대기하도록 설정할 수도 있습니다. 나는 추천 된 간격이 2 시간 인 것을 기억하고있는 것처럼 보인다. – cHao
@cHao * default * TCP keepalive 간격은 2 시간이며 기본적으로 * off * – EJP
입니다. @EJP는 기본적으로 켜져 있지만 다른 중개자기구의 네트워킹 장치는 2 시간 전에 시간 초과됩니다. http : //stackoverflow.com/questions/3907537/keep-alive-tcp-ip-connected-sockets-over-the-internet-when-how-and-how-much/5149662#5149662 – markmnl