문제

지난 학기 컴퓨터 네트워킹을했고 프로젝트를 위해 Linux (GCC 사용)에서 C 프로그래밍을 수행했습니다. 내가 계속 달려 가면서 매우 지루한 한 가지는 내 프로그램이 추락하거나 정체되면 (CTRL+C를 치기 위해 CTRL+C를 치야 할 것인지) 네트워크 포트는 여전히 1 분 정도 열려있을 것입니다. 따라서 즉시 프로그램을 다시 실행하려면 먼저 헤더 파일로 이동하여 포트를 변경하고 프로그램을 리메이크 한 다음 최종적으로 실행해야합니다. 분명히, 이것은 매우 지루해집니다.

프로세스가 사망하자마자 포트가 즉시 릴리스되는 위치를 구성 할 수있는 방법이 있습니까? Linux의 일부 설정 또는 내 프로그램의 MakeFile 또는 C의 프로그래밍 방식으로?

편집 : 서버를 작성하고 프로그램을 호스팅하기 위해 특정 포트를 선택할 때 언급하고 있습니다.

도움이 되었습니까?

해결책

옵션을 설정하십시오 SO_REUSEADDR 소켓에.

int yes = 1;
setsockopt(sockfd, SOL_SOCKET, SO_REUSEADDR, &yes, sizeof(int));

에서 Beej의 네트워크 프로그래밍 안내서.

다른 팁

@cogsy가 지적했듯이 약 2 분입니다. SO_REUSEADDR 소켓 옵션은 친구입니다. TCP 상태에 익숙해 지십시오 TIME_WAIT 문제를 일으키는 상태 :

 

나는 당신이 쓰는 프로그램이 서버라고 가정하므로 알려진 포트를 사용해야합니다. 이 경우 Cogsy가 지적한대로 소켓에서 SO_Reuse_addr 옵션을 사용해야합니다.

반면에 클라이언트 SW를 작성하는 경우 특정 포트를 선택하지 않아 시스템이 임의의 포트를 건네 줄 수 있습니다.

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