소켓의 다양한 옵션
protocol level |
option name |
설명 |
get |
set |
SOL_SOCKET |
SO_SNDBUF |
출력버퍼의 크기 |
O |
O |
SO_RCVBUF |
입력버퍼의 크기 |
O |
O | |
SO_REUSEADDR |
TIME-WAIT 상태에서도 포트에 대한 소켓을 강제해제하여 소켓을 할당 가능하도록 함 |
O |
O | |
SO_KEEPALIVE |
|
O |
O | |
SO_BROADCAST |
|
O |
O | |
SO_DONTROUTE |
|
O |
O | |
SO_OOBINLINE |
|
O |
O | |
SO_ERROR |
|
O |
X | |
SO_TYPE |
|
O |
X | |
IPPROTO_IP |
IP_TOS |
|
O |
O |
IP_TTL |
|
O |
O | |
IP_MULTICAST_TTL |
|
O |
O | |
IP_MULTICAST_LOOP |
|
O |
O | |
IP_NULTICAST_IF |
|
O |
O | |
IPPROTO_TCP |
TCP_KEEPALIVE |
|
O |
O |
TCP_NODELAY |
Nagle 알고리즘 |
O |
O | |
TCP_MAXSEG |
|
O |
O |
리눅스
소켓의 옵션 설정상태의 참조(get)
#include <sys/socket.h>
int getsockopt(int sock, int level, int optname, void* optval, socklen_t* optlen);
성공시 0, 실패시 -1 반환
sock : 옵션확인을 위한 소켓의 파일 디스크립터 전달
level : 확인할 옵션의 프로토콜 레벨 전달
optname : 확인할 옵션의 이름 전달
optval : 확인결과의 저장을 위한 버퍼의 주소값 전달
optlen : 네 번째 매개변수 optval로 전달된 주소 값의 버퍼크기를 담고 있는 변수의 주소 값 전달,
함수호출이 완료되면 이 변수에는 네 번째 인자를 통해 반환된 옵션정보의 크기가 바이트 단위로 계
산되어 저장된다
소켓의 옵션을 변경(set)
#include <sys/socket.h>
int setsockopt(int sock, int level, int optname, const void* optval, socklent_t optlen);
성공시 0, 실패시 -1 반환
sock : 옵션변경을 위한 소켓의 파일 디스크립터 전달
level : 변경할 옵션의 프로토콜 레벨 전달
optname : 변경할 옵션의 이름 전달
optval : 변경할 옵션정보를 저장한 버퍼의 주소 값 전달
optlen : 네 번째 매개변수 optval로 전달된 옵션정보의 바이트 단위 크기 전달
윈도우
소켓의 옵션 설정상태의 참조(get)
#include <winsock2.h>
int getsockopt(SOCKET sock, int level, int optname, char* optval, int* optlen);
성공시 0, 실패시 SOCKET_ERROR반환
sock : 옵션확인을 위한 소켓의 핸들 전달
level : 확인할 옵션의 프로토콜 레벨 전달
optname : 확인할 옵션의 이름 전달
optval : 확인결과의 저장을 위한 버퍼의 주소 값 전달
optlen : 네 번째 매개변수 optval로 전달된 주소 값의 버퍼 크기를 담고 있는 변수의 주소 값 전달, 함수호출이 완료되면 이 변수에는 네 번째 인자를 통해 반환된 옵션정보의 크기가 바이트 단위로 계산되어 저장
소켓의 옵션을 변경(set)
#include <winsock2.h>
int setsockopt(SOCKET sock, int level, int optname, const char* optval, int optlen);
sock : 옵션변경을 위한 소켓의 핸들 전달
level : 변경할 옵션의 프로토콜 레벨 전달
optname : 변경할 옵션의 이름 전달
optval : 변경할 옵션정보를 저장한 버퍼의 주소 값 전달
optlen : 네 번째 매개변수 optval로 전달된 옵션정보의 바이트 단위 크기 전달