TIME_WAIT 상태에서 클라이언트마다 하나씩 소켓 파일 설명자가 누설되는 네트워크 데몬 (poll()/accept()/fork() 스타일)이 있습니다.C에서 부정한 소켓 클로저를 디버깅하는 방법은 무엇입니까?
필자가 볼 수있는 한, 나는 더 이상 필요없는 소켓을 종료하고 닫을 수 있습니다. 다른 소켓 (예 : 포크의 클라이언트 측에있는 서버 소켓)은 바로 닫힙니다. 모든 소켓은 SO_REUSEADDR을 설정하고 SO_LINGER는 해제합니다. _exit()을 사용하여 프로그램을 종료하고 비 블로킹 폴링 소켓 작업을 사용하여 신호 처리기에서 '죽어가는'플래그를 설정합니다. 이렇게하면 나중에 죽어가는 플래그를 가져 와서 무료로 사용할 수 있습니다.), shutdown(), close() (시그널 핸들러에서는 위험 할 수있다).
하지만 여전히 fd가 누출되었습니다. 이런 종류의 문제를 디버깅하는 가장 좋은 방법은 무엇입니까? 프로세스에 관련된 많은 fds가 있기 때문에 종료 할 때 어떤 소켓이 느슨한 지 알면 도움이됩니다.
건배!
일부 코드는 유용 할 것입니다. – JeremyP
최소한의 예제가 없습니다. 아무도 아이디어가 없으면 전체 코드베이스의 타볼을 게시 할 수 있습니다. –
어떤 OS를 사용하고 있습니까? 서로 다른 OS에는 이런 종류의 디버깅을위한 도구가 상당히 다릅니다. – caf