다음을 통해 공유


CAsyncSocket::SetSockOpt

소켓 옵션을 설정 하려면이 멤버 함수를 호출 합니다.

BOOL SetSockOpt(
   int nOptionName,
   const void* lpOptionValue,
   int nOptionLen,
   int nLevel = SOL_SOCKET 
);

매개 변수

  • nOptionName
    소켓 옵션 값을 설정할 수 있습니다.

  • lpOptionValue
    요청한 옵션 값을 제공 하는 버퍼에 대 한 포인터입니다.

  • nOptionLen
    크기는 lpOptionValue 바이트에서 버퍼.

  • nLevel
    옵션에서 정의 된 수준. 유일한 지원 되는 수준은 SOL_SOCKETIPPROTO_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_LINGERl_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

참고 항목

참조

CAsyncSocket 클래스

계층 구조 차트

CAsyncSocket::AsyncSelect

CAsyncSocket::Bind

CAsyncSocket::Create

CAsyncSocket::GetSockOpt

CAsyncSocket::IOCtl