소켓을 사용하다 보면 옵션이 필요한 경우가 있습니다.

책에서 나오는 예제를 보면 가장 처음에는 send, recv buffer 크기 변경하는게 나오더 군요.

하지만 더 많죠. 거기에 대해서 블로깅 하겠습니다.

 

소켓 옵션 설정하기

 

소켓 옵션 얻기

 

일단 소켓 옵션 사용하는 것은 아래와 같은 함수를 사용합니다.

인자를 설명하자면

소켓, 변경할 옵션의 프로토콜 레벨, 변경할 옵션 이름, 변경할 옵션의 값을 저장한 버퍼, 전달하는 옵션의 바이트 단위 길이.

이렇게 5개가 되네요.

 

소켓 옵션은 크게 세 개가 있습니다.

SOL_SOCKET

IPPROTO_IP

IPPROTO_TCP

소켓에 대한 가장 일반적인 옵션

IP Protocol의 옵션

TCP Protocol의 옵션

 

소켓 옵션 - SOL_SOCKET

 

소켓 옵션 - IPPROTO_IP

 

소켓 옵션 - IPPROTO_TCP

 

SO_REUSEADDR 옵션

소켓을 사용해서 함수를 만들다 보면 bind가 되지 않는 현상을 자주 봤을 것입니다.. 이것은 4Way-handshaking 과정 때문인데 서버가 먼저 강제 종료 된다면 소켓이 바로 종료가 되는 것이 아니라 TIME-WAIT 상태로 빠지게 되기 때문에 그렇습니다. (Handshaking 참조) 그래서 현재 bind가 되어 있는 상태이기 때문에 다시 bind 하려고 하면 에러가 나는 것이죠. 이 상태는SOL_SOCKET의 SO_REUSEADDR을 바꿈으로써 해결 할 수 있습니다.  

실제로 SO_REUSEADDR의 옵션은 default값은 0(FALSE)입니다. 그래서 반드시 TRUE옵션을 주는 것을 추천을 합니다.

'NativeCode > api' 카테고리의 다른 글

WSAGetLastError()  (0) 2010.04.06
Sock 정보들  (0) 2010.04.04
Broadcasting 예제  (0) 2010.03.31
UDP Server, Client  (0) 2010.03.31
Server Socket  (0) 2010.03.19

+ Recent posts