Network

tcp_tw_reuse와 SO_REUSEADDR의 차이

behonestar 2017. 2. 8. 14:30

tcp_tw_reuse

클라이언트에서 서버로 connect()하는 과정에서 커널은 내부적으로 가용 포트를 로컬 포트로 선정합니다. 이 때 tcp_tw_reuse 옵션이 활성화되어 있으면 TIME_WAIT 상태의 포트도 로컬포트로 선정될 수 있습니다. (일반적인 경우를 가정하여 bind()를 수행하지 않고 connect()하는 쪽을 클라이언트라고 지칭하였습니다.)


SO_REUSEADDR

서버에서 TIME_WAIT 상태의 특정 포트에 bind()하려면 소켓에 SO_REUSEADDR 옵션을 적용해야 합니다. bind()를 사용한 경우 해당 로컬 포트는 tcp_tw_reuse 설정이 적용되지 않습니다.


// 소켓 생성

sockSvr = socket(AF_INET, SOCK_STREAM, 0);

addrSockSvr.sin_family = AF_INET;

addrSockSvr.sin_port = htons(333);

addrSockSvr.sin_addr.S_un.S_addr = INADDR_ANY;


// 소켓 옵션 설정

setsockopt(sockSvr, SOL_SOCKET, SO_REUSEADDR, (const char *)&bValid, sizeof(bValid));          


bind(sockSvr, (struct sockaddr *)&addrSockSvr, sizeof(addrSockSvr));



출처


'Network' 카테고리의 다른 글

SSL 인증서와 인증 방식  (0) 2020.06.04
OAuth2.0  (0) 2017.01.19
HTTP Digest 인증과 토큰 기반 인증  (0) 2015.05.10
[TCP] window size full  (0) 2015.03.18
[gsoap] 웹서버 오버헤드를 줄이기 위한 gsoap 버퍼링 구현  (0) 2015.03.05