2013-06-22 1 views
2

제 질문은 TCP 연결을 만들고, 약 1 시간 동안 데이터를 전송하지 않고있을 때 이미 서버와의 연결이 끊어져 있지만 연결이 끊어 졌다는 것을 알리지 않습니다. 살아있는 패킷을 보내야합니까? 서버 ? 또는 서버에서 클라이언트로 활성 패킷을 보내야합니까? 아니면 둘 다 보내야합니까?TCP 연결을 사용하면 연결 유지 패킷을 보내야합니까?

+0

OS가 TCP 킵 얼라이브를 보내야합니다. 그것들을 보내기 전에 오랜 시간 동안 대기하도록 설정할 수도 있습니다. 나는 추천 된 간격이 2 시간 인 것을 기억하고있는 것처럼 보인다. – cHao

+0

@cHao * default * TCP keepalive 간격은 2 시간이며 기본적으로 * off * – EJP

+0

입니다. @EJP는 기본적으로 켜져 있지만 다른 중개자기구의 네트워킹 장치는 2 시간 전에 시간 초과됩니다. http : //stackoverflow.com/questions/3907537/keep-alive-tcp-ip-connected-sockets-over-the-internet-when-how-and-how-much/5149662#5149662 – markmnl

답변

2

예. 며칠 전 TCP 소켓/서버 응용 프로그램을 만들었고 동일한 문제가 발생했습니다. 나는 keep alive 패킷을 보내기 시작하여 그것을 수정했다.

keep alive 패킷을 보내면 문제가 사라집니다.

내가 어떤 사람을 들었어요

는 OS 보내 나는이 매우 익숙하지 않은 나는, 당신을 위해 살아 패킷을 유지하지만,

+0

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

0

그것은 나를 통지하지 않습니다 명시 적으로 나를 위해 일한 살아 패킷을 계속 전송하는 것을 말한다 연결이 끊어졌습니다.

수 없습니다. 다음에 I/O를 시도 할 때 EOS 또는 '연결 재설정'을 유발하는 것 이외에 다른 방법을 사용할 수 없습니다.

이 문제가 있으면 내가 킵 얼라이브 패킷을 전송해야

..., 그래. 일반적으로는 그렇지 않을 수도 있습니다.