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

(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 Latte 하늘이도우사 2012. 3. 2. 12:56
  • Favicon of http://blog.naver.com/pure0027 BlogIcon 소켓어렵다 2015.01.08 21:58 ADDR EDIT/DEL REPLY

    글 보면서 공부 많이 하고갑니다!!
    근데 소켓 옵션 예제소스에서 버퍼크기를 100000으로 설정해준 후에 다시 get으로 얻어온게 아니라 바로 출력을 하셨던데...
    이걸 get으로 얻어와서 출력을 해보면 설정한 크기의 2배 값으로 나오더라구요! ㅎㅎ

    • Favicon of https://mintnlatte.tistory.com BlogIcon Latte 하늘이도우사 2017.01.18 19:12 신고 EDIT/DEL

      헐.. 이 댓글을 이제야 봤네요.. 2년전;;;
      지금 보니 말씀하신대로 그냥 설정한 값을 출력하고있네요 ㅋㅋ 이미지 캡쳐라 수정도 못하고..ㅠ
      말씀하신대로 getsockopt 로 변경된 값을 얻어오면 2배로 나오는데 그건 커널에서 입력값의 2배로 설정하네요..

  • sdf 2015.10.01 12:24 ADDR EDIT/DEL REPLY

    좋은 정보 잘 보고갑니다~