배경으로 IP를 통해 제 3의 서버와 통신하는 임베디드 장치가 있습니다. 타사 서버의 코드는 변경되지 않습니다. 최근 릴리스에서는 close()를 호출하기 전에 shutdown()을 호출하기 위해 ip disconnect 함수를 변경했습니다 (이전에는 close()를 호출 했었습니다). 임베디드 장치는 특정 인터럽트가 발생하면 통신 세션을 완료하지 않고 연결을 끊습니다. 이 문제가 세션의 잘못된 지점에서 발생하면 서버는 여러 가지 이유로 고객이 받아 들일 수없는 추적 파일을 생성하고 있습니다. 이것은 shutdown이 호출 될 때만 발생하며, 서버는 이것을 보내지 못한 오류 (및 추적 파일 생성)로 처리하는 반면, 더 급한 close()는 추적 할 필요가없는 다른 끝 단절 오류로 취급합니다.버클리 소켓 셧다운 기능, 얼마나 중요합니까?
따라서 명백한 해결 방법은 종료를 호출하는 것입니다. Barnes 씨의 대답은이 question의 두 가지 기능에 대해 잘 설명하고 있지만 특정 소켓에 하나의 프로세스 만 연결되었다는 것을 알고 있다면 종료 전에 shutdown을 사용해야 할 이유가 있습니까? "갑작스러운 단절은"좋은 일이 아니다 당신의 통신 프로토콜의 일부가되었습니다 것처럼
감사합니다, 패트릭
임베디드 장치 및 타사 서버에서 사용하는 TCP 스택은 무엇입니까? 모든 TCP 스택이 동일한 동작을하는 것은 아닙니다. 'shutdown' 대'close'. 또한'SO_LINGER' 옵션을 설정하고 있습니까? –
tcp 스택을 어떻게 식별합니까?우리는 우리 쪽 끝에 SO_LINGER를 사용합니다. – Patrick
어떤 운영 체제 (또는 라이브러리) 및 버전이 포함되어 있는지 알려주십시오. –