[소켓프로그래밍] setsockopt
setsockopt
setsockopt 함수는 소켓 옵션을 설정하는 함수입니다.
int setsockopt (
SOCKET s,
int level,
int optname,
const char FAR * optval,
int optlen
);
Parameters
s
[입력] 대상 소켓의 기술자(descriptor)를 명시합니다.
level
[입력] 소켓 옵션 레벨이 정의 되며, SOL_SOCKET 과 IPPROTO_TCP 중 하나가 될 수 있습니다.
optname
[입력] 셋팅 하기위한 소켓옵션 값입니다.
optval
[입력] 검색된 옵션을 저장 하기위한 데이터 버퍼를 포인트 합니다.
optlen
[입력] optval 매개변수 버퍼의 크기
Remarks
setsockopt 함수는 지정된 소켓의 옵션을 특정한 형태(type), 상태(state)로 결합하기 위해서 지정한 소켓옵션 값을 셋팅하는 함수입니다. 비록 여러 프로토콜 레벨로의 소켓 옵션이 존재 할 순 있다 하더라도, 가장 우선하는 레벨이 존재하게 됩니다. 옵션은 소켓 연산에 영향을 미칩니다. 예를들어 발송된 데이터(OOB 데이터를 예로 들 수 있습니다) 를 일반 데이터 스트림으로 수신했을때나, 소켓으로 브로드캐스트(broadcast) 메세지를 전송할때 영향을 미치게 됩니다.
이 함수에서 사용 할 수 있는 두가지 형태의 소켓옵션이 있습니다. 활성화 또는 비활성화 시키기 위한 Boolean 옵션과, 정수형(integer) 또는 구조체를 요구하는 옵션이 있습니다. Boolean 옵션을 활성화 하기 위해서 optval 매개변수는 0이 아닌 정수를 포인트 하고, 비활성화 하기 위해서 0을 포인트 합니다. optlen 매개변수는 Boolean 옵션에 대해서는 sizeof(int)로 설정 해야만 합니다. 다른 옵션들에 대해서, optval 매개변수는 설정하고자 하는 정수(integer)나 구조체를 넘겨야 하고, optlen 매개변수는 정수(integer) 또는 구조체의 길이를 넘겨야 합니다. 아래에 setsockopt 함수에서 사용 할 수 있는 옵션들을 간단한 설명과 함께 나열 해 보았습니다.
level = SOL_SOCKET
옵션값(Value) |
데이터형태(Type) |
의미(Meaning) |
---|---|---|
SO_BROADCAST |
BOOL |
소켓으로 브로드캐스트(broadcast) 메세지를 전송 할 수 있도록 합니다. |
SO_DEBUG |
BOOL |
디버깅 정보를 레코딩 합니다. |
SO_DONTLINGER |
BOOL |
소켓을 종료(close)할때 보내지지 않은 데이터를 보내기위해서 블럭킹 상태가 되지 않도록 합니다. 이 옵션을 셋팅하는 것은 LINGER 구조체의 멤버중 l_onoff를 0으로 셋팅하고 SO_LINGER 옵션을 셋팅 했을때와 같은 효력을 발휘합니다. |
SO_DONTROUTE |
BOOL |
라우팅 하지 않고, 직접 인터페이스로 보냅니다. |
SO_GROUP_PRIORITY |
int |
차후에 소켓그룹을 사용하기위해 예약 되어있습니다. 소켓그룹의 일부분인 소켓을 만들기위해 관련된 우선사항을 명시합니다. |
SO_KEEPALIVE |
BOOL |
Keepalives를 전송합니다. |
SO_LINGER |
struct LINGER |
아직 전송되지 않은 데이터가 있을 경우 소켓을 종료(close)할때 대기합니다. |
SO_OOBINLINE |
BOOL |
일반 데이터 스트림(normal data stream)으로 out-of-band 데이터를 수신합니다. |
SO_RCVBUF |
int |
데이터를 수신하기 위한 총 버퍼공간을 명시합니다. 요놈은 SO_MAX_MSG_SIZE 나, TCP Window의 크기와 상관이 없습니다. |
SO_REUSEADDR |
BOOL |
이미 사용되고 있는 어드레스를 바인드 할 수 있도록 합니다. |
SO_SNDBUF |
int |
데이터를 전송하기 위한 총 버퍼공간을 명시합니다. 요놈은 SO_MAX_MSG_SIZE 나, TCP Window의 크기와는 상관이 없습니다. |
level = IPPROTO_TCP
TCP_NODELAY |
BOOL |
전송합병(send coalescing)을 위해 Nagle 알고리즘을 비 활성화 합니다. |
Return Values
에러가 발생하지 않으면, setsockopt 함수는 0을 반환합니다. 에러가 발생하면, SOCKET_ERROR을 반환하면 WSAGetLastError 함수를 이용해서 특정 에러 코드를 얻어낼 수 있습니다.
Error Codes
WSANOTINITIALISED |
이 함수를 사용하기 전에 성공적인 WSAStartup 함수의 호출이 없었습니다. |
WSAENETDOWN | 네트웍 서브 시스템에 에러가 발생했습니다. |
WSAEFAULT |
optval 또는 optlen 매개변수 중의 하나가 올바르지 않거나 optlen 매개변수의 값이 너무 작습니다. |
WSAEINPROGRESS |
블럭킹 윈속 v1.1 이 현재 진행 중이거나, 서비스 프로바이더가 콜백 함수를 여전히 처리하고 있습니다. |
WSAEINVAL |
level 매개변수가 잘못됐거나, 알 수 없는 값 입니다. |
WSAENETRESET |
SO_KEEPALIVE가 설정 되었을때, 접속이 타입아웃 되었습니다. |
WSAENOPROTOOPT |
알 수 없는 옵션이거나, 지원지지 않는 옵션을 사용 했습니다. |
WSAENOTCONN |
SO_KEEPALIVE가 설정 되었을때, 접속이 리셋 되었습니다. |
WSAENOTSOCK |
기술자(descriptor)가 소켓 기술자가 아닙니다. |
QuickInfo
Windows NT : 사용가능
Windows : 사용가능
Windows CE : 버젼 1.0 그리고 그이후의 버젼에서 사용가능
Header :
Win16/32 : winsock.h
Win32-II : winsock2.h
Import Library :
Win16 : winsock.lib
Win32 : wsock32.lib
Win32-II : ws2_32.lib
See Also
overview, bind, getsockopt, ioctlsocket, socket, WSAAsyncSelect, WSAEventSelect
출처 : DEVPIA 곽용진님 style APIs [출처] [Socket] setsockopt|작성자 임종배
'공부합시다 > 소켓프로그래밍' 카테고리의 다른 글
패킷 캡쳐로 살펴본 이더넷 프레임 (0) | 2009.09.15 |
---|---|
이더넷 프레임의 구조 (0) | 2009.09.15 |
pcap_t, pcap_pkthdr 구조체 (0) | 2009.08.21 |
[소켓프로그래밍] WSAAsyncSelect (0) | 2009.07.09 |
[소켓프로그래밍] winsock.h 중복 재정의 에러, error C2011: 'fd_set' : 'struct' type redefinition (0) | 2009.07.03 |