티스토리 뷰

IT/Network

[네트워크] 바인딩된 TIME-WAIT 상태인 주소 및 포트를 재사용할 수 있게 설정하기 (SO_REUSEADDR)

주인장 진빼이

Socket 옵션 설정하기

TIME-WAIT 상태가 길어지거나 네트워크가의 상태가 원활하지 못하다면 언제까지 TIME-WAIT 상태가 지속될지 모른다. TIME-WAIT 상태일 때 해당 주소와 포트로 바인딩을 시도한다면 프로그램은 오류를 내뱉을 것이다. 이를 해결하기 위해 소켓 옵션을 이용하여 바인딩된 TIME-WAIT 상태인 주소와 포트를 재할당 및 재사용하도록 설정할 수 있다.

 

다음과 같이 SO_REUSEADDR 옵션을 설정하여 바인딩된 TIME-WAIT 상태인 주소와 포트를 재사용할 수 있다.

int reuseOpt = 1;
setsockopt(socket, SOL_SOCKET, SO_REUSEADDR, (const char*)&reuseOpt, sizeof(reuseOpt));

SO_REUSEADDR 옵션 적용됨: 1

SO_REUSEADDR 옵션 적용안됨: 0

 

 

클라이언트 소켓 옵션은 설정할 필요가 있을까 ?

클라이언트가 연결될 때 무작위 포트가 활성화 되어 연결되기 때문에 설정할 필요가 없다고 볼 수 있다. 하지만 서버는 클라이언트와 연결 될 때 특정 포트로 연결되기 때문에 바인딩할 때 실패할 위험이 존재한다. 즉, 클라이언트에 할당된 포트는 유동적이고 서버의 포트는 고정된 것이라 볼 수 있다. 그러므로 SO_REUSEADDR 소켓 옵션은 서버에게 설정하는 것이 바람직하다.

댓글
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
«   2024/11   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
글 보관함