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 옵션과,
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