소켓 옵션과 관련 API

2021. 3. 22. 00:52 기타/C언어

1. 소켓의 옵션

아래는 프로토콜 레벨과 옵션 이름들이다.

1-1. SOL_SOCKET : 일반적인 옵션

  • SO_SNDBUF : 송신버퍼 크기 설정
  • SO_RCVBUF : 수신버퍼 크기 설정
  • SO_REUSEADDR : 지역 주소(IP,Port) 재사용여부
  • SO_KEEPALIVE : 주기적으로 연결 여부 확인
  • SO_BROADCAST : 브로드캐스팅 허용여부
  • SO_DONTROUTE : 라우팅 테이블 참조과정 생략여부
  • SO_OOBINLINE
  • SO_ERROR
  • SO_TYPE : 소켓의 타입(변경 불가)

1-2. IPPROTO_IP : IP 패킷 관련

  • IP_TOS : Type of Service 변경
  • IP_TTL : Time-To-Live 변경
  • IP_MULTICAST_TTL : 멀티캐스트 패킷의 TTL 변경
  • IP_MULTICAST_LOOP : 멀티캐스트 패킷의 루프백 여부
  • IP_MULTICAST_IF : 멀티캐스트 패킷을 보낼 인터페이스 설정

1-3. IPPROTO_TCP : TCP관련

  • TCP_KEEPALIVE : keep alive 시간 간격 지정
  • TCP_NODELAY : Nagle 알고리즘 사용 여
  • TCP_MAXSEG : TCP 최대 세그먼트 지정

2. 소켓 옵션 관련 API

#include <sys/socket.h>

2-1. 소켓 옵션의 설정상태 참조

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

2-1-1. 반환값

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

2-1-2. 인자

  • sock: 소켓 파일 디스크립터 전달
  • level: 확인할 옵션의 프로토콜 레벨 전달
  • optname: 옵션이름 전달
  • optval: 참조확인 결과 저장을 위한 버퍼의 주소 값 전달
  • optlen: 4번째 인자의 버퍼크기를 담고 있는 변수의 주소 값 전달

2-2. 소켓 옵션의 설정상태 변경

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

2-2-1. 반환값

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

2-2-2. 인자

  • sock: 소켓 파일 디스크립터 전달
  • level: 변경할 옵션의 프로토콜 레벨 전달
  • optname: 옵션이름 전달
  • optval: 변경할 옵션정보를 저장한 버퍼의 주소 값 전달
  • optlen: 4번째 인자의 버퍼크기 전달



출처: https://sjh836.tistory.com/51?category=680969 [빨간색코딩]