CAsyncSocket::SetSockOpt
소켓 옵션을 설정 하려면이 멤버 함수를 호출 합니다.
BOOL SetSockOpt(
int nOptionName,
const void* lpOptionValue,
int nOptionLen,
int nLevel = SOL_SOCKET
);
매개 변수
nOptionName
소켓 옵션 값을 설정할 수 있습니다.lpOptionValue
요청한 옵션 값을 제공 하는 버퍼에 대 한 포인터입니다.nOptionLen
크기는 lpOptionValue 바이트에서 버퍼.nLevel
옵션에서 정의 된 수준. 유일한 지원 되는 수준은 SOL_SOCKET 및 IPPROTO_TCP.
반환 값
함수가 성공 하면 0이 아닌. 그렇지 않으면 0이 고 특정 오류 코드를 호출 하 여 검색할 수 있는 GetLastError.다음 오류는이 멤버 함수에 적용 됩니다.
WSANOTINITIALISED 성공적으로 AfxSocketInit 이 API를 사용 하기 전에 발생 합니다.
WSAENETDOWN 는 Windows 소켓 구현이 감지 네트워크 하위 시스템 실패 합니다.
WSAEFAULT lpOptionValue유효한 일부가 프로세스 주소 공간에서 아닙니다.
WSAEINPROGRESS Windows 소켓 차단 작업이 진행 중입니다.
WSAEINVAL nLevel잘못 된 정보에서 lpOptionValue 올바르지 않습니다.
WSAENETRESET 연결 때 아웃 시간이 있는 SO_KEEPALIVE 설정 됩니다.
WSAENOPROTOOPT 알 수 없거나 지원 되지 않는 옵션입니다.특히 SO_BROADCAST 형식의 소켓에서 지원 되지 않는 SOCK_STREAM, 하지만 SO_DONTLINGER, SO_KEEPALIVE, SO_LINGER, 및 SO_OOBINLINE 형식의 소켓에서 지원 되지 않습니다 SOCK_DGRAM.
WSAENOTCONN 연결 했습니다 때 다시 SO_KEEPALIVE 설정 됩니다.
WSAENOTSOCK 설명자가 소켓이 아닙니다.
설명
SetSockOpt연결 된 상태에서 모든 종류의 소켓에 소켓 옵션의 현재 값을 설정 합니다.옵션에 여러 프로토콜 수준에서 존재할 수 있지만이 사양만 "소켓" 최상위 수준에서 존재 하는 옵션을 정의 합니다.소켓 작업 브로드캐스트 메시지 보낼 수 있는 소켓에 한지 등에 일반 데이터 스트림에 긴급된 데이터 수신 여부와 같은 옵션을 적용 됩니다.
소켓 옵션의 두 가지: 기능이 나 동작을 활성화 하거나 비활성화 하는 부울 옵션 및 옵션 값은 정수 값 또는 구조를 필요로 합니다.부울 옵션을 사용 하려면 lpOptionValue 0이 아닌 정수로 가리킵니다.옵션을 사용 하지 않으려면 lpOptionValue 정수 0을 가리킵니다.nOptionLen같아야 합니다 sizeof(BOOL) 부울 옵션.다른 옵션에 대 한 lpOptionValue 를 가리키는 정수 또는 옵션에 대해 원하는 값을 포함 하는 구조 및 nOptionLen 정수 또는 구조체입니다.
SO_LINGER 보내지 때 동작이 않은 데이터는 대기 중인 소켓에 컨트롤 및 닫습니다 함수 호출 소켓을 닫습니다.
기본적으로 소켓을 바인딩할 수 없습니다 (참조 바인딩할) 로컬 주소는 이미 사용 중입니다.그러나 경우에 따라서는,이 "이런 방식으로 주소를 다시 사용 하려면" 바람직합니다.모든 연결 로컬 및 원격 주소 조합으로 고유 하 게 식별 하므로 두 소켓으로 원격 주소는 로컬 주소로 바인딩 문제가 있는 문제가 발생 하지 않습니다.
Windows 소켓 구현을 알리기 위해 하는 바인딩할 소켓 호출 해야 될 허용 원하는 주소 이미 다른 소켓에 의해 사용 중 이므로, 응용 프로그램을 설정 해야는 SO_REUSEADDR 소켓 옵션 소켓을 발급 하기 전에 바인딩할 호출.옵션의 시간에만 해석 됩니다는 바인딩할 호출: 따라서 기존 주소로 바인딩할 수 없습니다 소켓 옵션을 설정 하려면 (무해 하지만) 필요 없습니다 및 설정 또는 재설정 옵션 뒤는 바인딩할 호출 된 다른 소켓 또는 적용이 되지 않습니다.
Windows 소켓 "keep-alive" 패킷 전송 제어 프로토콜 (TCP) 연결을 사용 하는 설정 사용 하는 응용 프로그램을 요청할 수 있는 SO_KEEPALIVE 소켓 옵션.연결 유지를 사용 하는 Windows 소켓 구현이 지원 하지 않아도: 있으면 정확한 의미 구현에 따라 다릅니다 있지만 4.2.3.6 RFC 1122를 따라야 합니다: "인터넷 호스트에 대 한 요구 사항-통신 레이어." 오류 코드는 "유지"의 결과로 연결이 끊어질 경우 WSAENETRESET 소켓에서 진행 중인 모든 호출 반환 됩니다 및 모든 후속 호출에 실패 합니다 WSAENOTCONN.
TCP_NODELAY 옵션 Nagle 알고리즘을 비활성화 합니다.Nagle 알고리즘은 큰 패킷의 받을 때까지 승인 되지 않은 보내기 데이터를 버퍼링 하 여 호스트에서 보낸 작은 패킷 수를 줄이기 위해 사용 됩니다.그러나 일부 응용 프로그램에 대 한이 알고리즘 성능을 떨어뜨릴 수 있습니다 및 TCP_NODELAY 사용 하 여 해제할 수 있습니다.응용 프로그램 작성자가 설정 해야 TCP_NODELAY 의 영향을 그렇게가 설정 이후 알려져 있고 원하는 아니면 TCP_NODELAY 네트워크 성능에 심각한 부정적인 영향을 가질 수 있습니다.TCP_NODELAY 유일한 수준을 사용 하 여 소켓 옵션을 지 원하는 IPPROTO_TCP. 수준이 다른 모든 옵션 사용 SOL_SOCKET.
일부 구현에서는 Windows 소켓 공급 하면 디버그 정보 출력의 SO_DEBUG 응용 프로그램에서 옵션을 설정 합니다.
다음 옵션에 대 한 지 SetSockOpt.형식으로 주소가 지정 된 데이터 형식을 lpOptionValue.
값 |
형식 |
의미 |
---|---|---|
SO_BROADCAST |
BOOL |
소켓의 브로드캐스트 메시지의 전송을 허용 합니다. |
SO_DEBUG |
BOOL |
디버깅 정보를 기록합니다. |
SO_DONTLINGER |
BOOL |
차단 하지 닫기 대기 보내지 않은 데이터를 보낼 수 있습니다.이 옵션을 설정 하는 설정에 해당 하는 SO_LINGER 와 l_onoff 0으로 설정 합니다. |
SO_DONTROUTE |
BOOL |
라우팅 안 함: 보내기 인터페이스를 직접 합니다. |
SO_KEEPALIVE |
BOOL |
연결 유지를 보냅니다. |
SO_LINGER |
LINGER 구조체 |
링거 닫기 데이터 되는지 보내지 않은 경우. |
SO_OOBINLINE |
BOOL |
밴드의 데이터에서 일반 데이터 스트림을 받습니다. |
SO_RCVBUF |
int |
수신 버퍼 크기를 지정 합니다. |
SO_REUSEADDR |
BOOL |
소켓이 이미 사용 중인 주소에 바인딩할 수 있습니다.(See Bind.) |
SO_SNDBUF |
int |
전송 버퍼 크기를 지정 합니다. |
TCP_NODELAY |
BOOL |
보내기 통합을 위해 Nagle 알고리즘을 비활성화합니다. |
버클리 소프트웨어 배포 (BSD) 옵션에 대 한 없습니다 SetSockOpt 입니다.
값 |
형식 |
의미 |
---|---|---|
SO_ACCEPTCONN |
BOOL |
소켓이 수신 중입니다. |
SO_ERROR |
int |
오류 상태를 가져온 다음 지웁니다. |
SO_RCVLOWAT |
int |
저품질 워터 마크를 나타납니다. |
SO_RCVTIMEO |
int |
수신 시간 제한 |
SO_SNDLOWAT |
int |
저품질 워터 마크를 보냅니다. |
SO_SNDTIMEO |
int |
제한 시간을 보냅니다. |
SO_TYPE |
int |
소켓의 형식입니다. |
IP_OPTIONS |
|
옵션 필드의 IP 헤더를 설정 합니다. |
요구 사항
헤더: afxsock.h