2012-01-20 4 views
1

저는 Linux에서 실행되는 C++로 개발 된 응용 프로그램을 보유하고 있습니다. 이 응용 프로그램은 시작할 때 특정 TCP 소켓을 엽니 다. 그러나 연결이 설정된 상태에있을 때이 응용 프로그램이 종료되면 서버 측 소켓은 잠시 동안 닫힌 상태 (TIME_WAIT)로 남아 있습니다.열린/매달린 소켓을 강제로 닫는 방법은 무엇입니까?

내 응용 프로그램이 immideatly 다시 시작되기 때문에 이전 충돌에서 거의 60 초 걸리는 포트를 바인딩 할 수 없습니다.

모든 열린/매달린 소켓을 강제로 닫을 수있는 시스템 호출이 있습니까 ?? 그래서 바인딩하기 전에 모든 열린/매달린 소켓이 닫혀 있고 바인딩이 실패하지 않도록 할 수 있습니다.

감사합니다.

답변

3

SO_REUSEADDRsetsockopt을 사용하여 설정할 수 있습니다. 그러면 곧바로 구속 할 수 있습니다.

int optval = 1; 
setsockopt(s, SOL_SOCKET, SO_REUSEADDR, &optval, sizeof(optval)); 
관련 문제