위 표에서 보이듯이 소켓의 옵션은 계층별로 분류된다. IPPROTO_IP 레벨의 옵션들은 IP프로토콜에 관련되며 IPPROTO_TCP레벨의 옵션은 TCP프로토콜에 관련된 사항이다. SOL_SOCKET옵션들은 소켓에 대한 가장 일반적인 옵션들이다.

 

각각의 옵션을 참조하거나 설정할 때에는 함수를 이용해야 하는데 이떄 이용하는 함수가

 

getsockopt & setsockopt이다.

 

#include<sys/socket.h>에 선언되어 있다.

 

int getscokopt(int sock,int level, int optname, void *optval, socklen_t *optlen);

성공시 0, 실패시 -1 반환

 

sock -> 옵션 확인을 위한 소켓의 디스크립터 전달.

level -> 확인할 옵션의 프로토콜 레벨 전달.

optname -> 확인할 옵션의 이름 전달.

optval -> 확인결과의 저장을 위한 버퍼의 주소값 전달.

optlen -> 네번째 매개변수 optval 로 전달된 주소 값의 버퍼크기를 담고있는 변수의 주소 값 전달, 함수호출이 완료되면 이 변수에는 네번째 인자를 통해 반환된 옵션정보의 크기가 바이트 단위로 계산되어 저장된다.

 

int setsockopt(int sock, int level, int optname, const void* optval, socklen_t optlen);

성공시 0 실패시 -1반환.

 

sock -> 옵션변경을 위한 소켓의 파일 디스크립터 전달.

level -> 변경할 옵션의 프로토콜 레벨 전달.

optname -> 변경할 옵션의 이름 전달.

optval -> 변경할 옵션정보를 저장한 버퍼의 주소 값 전달.

optlen -> 네번째 매개변수 optval로 전달된 옵션정보의 바이트 단위 크기 전달.

 

몇가지 살펴보면, SO_SNDBUF와 SO_RCVBUF는 입출력 버퍼를 제어할 때 사용하는 함수이고, SO_REUSEADDR 함수는 서버측에서 time-wait 상태가 발생하였을떄 이 값을 1(TURE)로 바꾸어 주면 bind error가 뜨지 않고 바로 주소를 재할당해 줄 수가 있다.

또한 TCP소켓에 기본설정으로 Nagle 알고리즘이 설정되어 있는데 이는 때때로 옵션을 풀어줘야 하는 경우가 생긴다. 이때 사용하는 함수가 TCP_NODELAY이다. 이때는 반대로 값을 1로 바꿔 주어야 한다.

 

<Nagle 알고리즘 >

'Programming > Socket' 카테고리의 다른 글

클라이언트 IP 가져오기  (0) 2012.05.14
멀티프로세스 소스  (0) 2012.05.10
멀티프로세스 서버  (0) 2012.05.08
TCP server 함수호출 순서.  (0) 2012.04.25
Socket 함수 구조체  (0) 2012.04.24

+ Recent posts