소켓 옵션이란?
소켓 함수의 기본 동작을 변경할 수 있으며, 이를 이용하여 소켓과 프로토콜 구현 코드에 대한 좀 더 세부적인 제어를 할 수 있게 된다.
소켓 옵션을 설정하는 함수
int setsockopt(
SOCK s, // 옵션을 적용할 소켓
int level, // 옵션을 해석하고 처리하는 코드를 나타내며, 옵션 레벨이라 부른다. 소켓코드(SOL_SOKET), IP 프로토콜 코드(IPPROTO_IP), TCP 프로토콜 코드(IPPROTO_TCP)
int optname, // 옵션 이름
const char* optval, // 설정할 옵션 값을 담고 있는 버퍼의 주소
int optlen // optval이 가리키는 버퍼의 크기
);
소켓 옵션을 얻어오는 함수
int getsockopt(
SOCK s,
int level,
int optname,
char* optval,
int* optlen
); // 각 옵션에 대한 설명은 소켓 옵션을 설정하는 함수를 참고할 것
옵션 레벨과 옵션 이름에 대한 테이블
SOL_SOCKET
| optname | optval | get | set | 설명 | 
| SO_BROADCAST | BOOL | O | O | 브로드캐스팅 허용 | 
| SO_DONTROUTE | BOOL | O | O | 데이터 전송시 라이팅 테이블 | 
| SO_KEEPALIVE | BOOL | O | O | 주기적으로 연결 여부 확인 | 
| SO_LINGER | linger{} | O | O | 보낼 데이터가 있을 경우 closesocket() 함수 리턴 지연 | 
| SO_SNDBUF SO_RCVBUF | int | O | O | 소켓 송/수신 버퍼 크기 설정 | 
| SO_SNDTIMEO SO_RCVTIMEO | int | O | O | send(), recv() 등의 함수에 대한 타임아웃 설정 | 
| SO_REUSEADDR | BOOL | O | O | 지역 주소(IP 주소, 포트번호) 재사용 허용 | 
IPPROTO_IP
| optname | optval | get | set | 설명 | 
| IP_HDRINCL | BOOL | O | O | 데이터를 보낼 때 IP 헤더를 포함 | 
| IP_TTL | int | O | O | IP 패킷의 TTL(time-to-live) 변경 | 
| IP_MULTICAST_IF | IN_ADDR{} | O | O | 멀티캐스트 패킷을 보낼 인터페이스 설정 | 
| IP_MULTICAST_TTL | int | O | O | 멀티캐스트 패킷의 TTL 변경 | 
| IP_MULTICAST_LOOP | BOOL | O | O | 멀티캐스트 패킷의 루프백 여부 결정 | 
|  IP_ADD_MEMBERSHIP | ip_mreq{} | O | 멀티캐스트 그룹 가입과 탈퇴 | 
IPPROTO_TCP
| optname | optval | get | set | 설명 | 
| TCP_NODELAY | BOOL | O | O | Nagle 알고리즘 작동 중지 | 
[출처] 소켓 옵션을 설정하자. (정문수 개인 카페) |작성자 유빈아빠
 
댓글 없음:
댓글 쓰기