보고서 실행에 대한 정보를 수신하기 위해 포트를 수신하는 프로그램이 있습니다. 프로그램을 닫았다가 다시 열면 사용하는 포트가 이미 사용 중이라는 오류가 발생합니다. 을 보면 netstat
CLOSE_WAIT 상태에 해당 포트의 인스턴스가 9개 있고 수신 상태에 있는 인스턴스가 1개 있는 것을 알 수 있습니다. 청취 상태에 있는 인스턴스는 pid 488이 소유하고 있다고 말합니다. 작업 관리자는 해당 ID를 가진 프로세스가 없다고 표시하고 taskkill
동일하게 말합니다. 이 앱은 사내 .NET 애플리케이션입니다.
이것은 프로덕션 환경이므로 시스템을 다시 시작하지 않으려고 합니다. 이 문제의 원인은 무엇이며 이를 해결하려면 어떻게 해야 합니까?
답변1
CLOSE_WAIT는 소켓이 다른 쪽 끝에서 FIN 패킷을 수신했으며 해당 청취 소켓을 소유한 애플리케이션이 닫히기를 기다리고 있음을 의미합니다. 청취 소켓에서 close()를 호출하지 않으면 마치 그랬던 것처럼 떠다니는 원인이 될 수 있습니다.
내부 .NET 애플리케이션이므로 소스 코드를 다시 확인하여 종료하기 전에 소켓이 제대로 close()되고 있는지 확인하겠습니다.
CLOSE_WAIT를 포함한 소켓 상태에 대한 추가 정보: http://blogs.technet.com/b/janelewis/archive/2010/03/09/explaining-close-wait.aspx