■ 소켓의 세부사항을 조절하기 위한 함수.

(1) 소켓 옵션
: 네트워크 환경은 매우 다양하며, 예측불가하다. 때문에 네트워크 프로그램의 종류에 따라서 소켓의 세부사항들을 조절해야 하는 경우가 발생하는데, 이런한 소켓옵션 설정을 위해 소켓은 getsockopt()setsockopt() 두개의 함수를 제공한다.


(2) setsockopt()
: 소켓의 옵션값을 설정하는 함수.

● 함수원형
  int setsockopt(int sock, int level, int optname, const void *optval, socklen_t optlen)

● 리턴값
  - 성공 시 : 0, 실패 시 : -1

● 옵션
  - s : 옵션변경을 위한 소켓의 파일 디스크립터
  - level : 변경할 소켓 옵션의 레벨
  - optname : 변경할 옵션의 이름
  - optval : 변경할 옵션정보를 저장한 버퍼의 포인터
  - optlen : optval 버퍼의 크기

  ○ 소켓 옵션 레벨
    - 소켓 레벨에서의 처리 (SOL_SOCKET)
      : 송수신 버퍼의 크기 조절, 브로드캐스팅 허용, 연결여부 확인 등
    - 프로토콜 레벨에서의 처리 (OPPROTO_IP, IPPROTO_TCP)
      : IP헤더 포함여부 결정, IP패킷의 TTL값 변경, Nagle 알고리즘 작동 정지 등

  ○ 옵션 및 데이터형
    - SOL_SOCKET 레벨에서 사용할 수 있는 옵션과 데이터 형


- IPPROTO_TCP 레벨에서 사용할 수 있는 옵션과 데이터 형


(3) getsockopt()
: 소켓에 설정된 값을 얻어오는 함수.

● 함수원형
  int getsockopt(int sock, int level, int optname, void *optval, socklen_t optlen)

● 리턴값
  - 성공 시 : 0, 실패 시 : -1

● 옵션
  - s : 옵션변경을 위한 소켓의 파일 디스크립터
  - level : 변경할 소켓 옵션의 레벨
  - optname : 변경할 옵션의 이름
  - optval : 확인결과의 저장을 위한 버퍼의 포인터
  - optlen : optval 버퍼의 크기를 담고있는 포인터

※ 참고자료 : http://sharkynara.egloos.com/1103575


by 민트앤라떼 2012. 3. 2. 12:56