문제

클라이언트는 서버의 데이터가 많지 않으면 TCP 연결 종료는 다음과 같습니다.

FIN -->
   <-- ACK
   <-- FIN, ACK
ACK -->

서버가 데이터 전송을 바쁘게하는 경우 :

FIN -->
    <-- ACK,PSH
RST -->

서버 연결은 Close_wait 상태로 나오고 오랫동안 거기에 매달려 있습니다.

여기서 문제는 무엇입니까? 클라이언트 관련 또는 서버 관련? 이것은 로컬 소켓의 경우 redhat5에서 발생합니다.

이것 기사 "rst"가 전송되는 이유에 대해 이야기하지만 서버 연결이 Close_wait에 왜 갇힌 지 모르고 FIN을 보내지 않습니다.

편집] 가장 중요한 정보를 무시했습니다. 이것은 QEMU의 SLIRP 네트워크 에뮬레이션에서 발생합니다. 긴밀한 연결을 다루는 SLIRP 버그의 문제인 것 같습니다.

도움이 되었습니까?

해결책 3

이것은 알려져 있습니다 결함 QEMU의 경우.

다른 팁

이것은 스트림에 읽지 않은 데이터가 있고 클라이언트가 읽기를 끝내지 않았 음을 의미합니다.

당신은 그것을 사용하여 그것을 강제로 제거 할 수 있습니다 SO_LINGER 옵션. 관련 문서가 있습니다 Linux의 경우 (옵션 자체도 참조하십시오. 여기), [Win32의 경우 일치 기능 2].

서버 쪽이 열려있는 서버 쪽이므로 서버 측면에있어서 비활성화 할 수 있습니다. SO_LINGER.

서버가 소켓을 닫지 않았다는 것을 의미 할 수 있습니다. "LSOF"를 사용하여 TCP 소켓이 포함 된 해당 프로세스에서 열린 파일 설명자를 나열하여 쉽게 알 수 있습니다. 수정 사항은 프로세스가 완료되면 소켓을 항상 닫게하는 것입니다 (오류 케이스에서도)

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top