2014-01-10 3 views
0

우리의 suse 리눅스 서버에서 사용중인 클라이언트 서버 응용 프로그램이 있습니다.
때때로 클라이언트 측에서 TCP 소켓이 사라지고 서버 측의 소켓의 다른 쪽 끝이 존재하는 경우가 있습니다.변경하려는 TCP 종료 시간 초과

Linux 서버에서 백엔드를 중지하면 백엔드는 나머지 모든 TCP 연결과 "좀비"소켓을 닫으려고합니다.

(strace로 본다).

백엔드가 더 이상 클라이언트 측에 TCP 연결을 닫으려고 할 때 [FIN, ACK] 패킷을 대상으로 보냅니다. 그리고 물론, 아무것도 돌아 오지 않습니다.

백엔드가이 패킷을 보내기 위해 반복합니다. 처음으로 몇 분의 1 초만 기다렸다가 반복하면 길어지고 길게 기다립니다. 결국 그것은 그것을 반복하기 위해 몇 초 기다린다. 그러나 15 초 후 시간 초과가 발생하고 다른 tcp 연결을 종료합니다.

이제 15 초 제한 시간이 어디에서 오는지 알 수 없습니다. 나는 그것을 바꾸고 싶다.

대단히 감사합니다.

+0

새 코드를 더 많이 추가하는 대신 * 설명하는 버그 *를 수정하는 것이 좋습니다. 1. 소켓은 그냥 사라지지 않습니다. 그들은 닫히거나 응용 프로그램에서 누출됩니다. 소켓 누수가 주요 문제이며 해결해야합니다. 2. TCP 응용 프로그램은 항상 상대방에 의한 단절을 감지 할 수 있습니다. 응용 프로그램이 그렇게하지 않으면 잘못 작성되고 다시 수정해야합니다. – EJP

답변

1

두 가지 문제가있을 수 있습니다.

  • 클라이언트의 연결을 끊고 서버의 소켓 끝을 닫아야 리소스를 최대한 확보 할 수 있습니다. 응용 프로그램 계층에서 활동이없는 연결에 대해 시간 초과를 설정할 수 있습니다. this을 읽으십시오.
  • "좀비"소켓을 응용 프로그램 계층에서 처리 할 수없는 경우 SO에서 시간 초과를 변경할 수 있습니다. this을 읽으십시오.