Share via


LPWSPSETSOCKOPT 콜백 함수(ws2spi.h)

LPWSPSetSockOpt 함수는 소켓 옵션을 설정합니다.

구문

LPWSPSETSOCKOPT Lpwspsetsockopt;

int Lpwspsetsockopt(
  [in]  SOCKET s,
  [in]  int level,
  [in]  int optname,
  [in]  const char *optval,
  [in]  int optlen,
  [out] LPINT lpErrno
)
{...}

매개 변수

[in] s

소켓을 식별하는 설명자입니다.

[in] level

옵션이 정의된 수준입니다. 지원되는 수준에는 SOL_SOCKET 포함 됩니다. 자세한 내용은 Winsock 부록을 참조하세요.

[in] optname

값을 설정할 소켓 옵션입니다.

[in] optval

요청된 옵션의 값이 제공되는 버퍼에 대한 포인터입니다.

[in] optlen

옵트발 버퍼의 크기(바이트)입니다.

[out] lpErrno

오류 코드에 대한 포인터입니다.

반환 값

오류가 발생하지 않으면 LPWSPSetSockOpt는 0을 반환합니다. 그렇지 않으면 SOCKET_ERROR 값이 반환되고 lpErrno에서 특정 오류 코드를 사용할 수 있습니다.

오류 코드 의미
WSAENETDOWN
네트워크 하위 시스템이 실패했습니다.
WSAEFAULT
optval이 프로세스 주소 공간의 유효한 부분에 있지 않거나 optlen 매개 변수가 너무 작습니다.
WSAEINPROGRESS
콜백이 진행 중일 때 함수가 호출됩니다.
WSAEINPROGRESS
Windows 소켓 호출 차단이 진행 중이거나 서비스 공급자가 여전히 콜백 함수를 처리하고 있습니다.
WSAEINVAL
수준이 유효하지 않거나 optval의 정보가 잘못되었습니다.
WSAENETRESET
해당 작업이 진행되는 동안 오류가 발생하여 연결이 끊겼습니다.
WSAENOPROTOOPT
지정된 공급자에 대해 옵션을 알 수 없거나 지원되지 않습니다.
WSAENOTCONN
SO_KEEPALIVE 설정되면 연결이 다시 설정되었습니다.
WSAENOTSOCK
설명자가 소켓이 아닙니다.

설명

LPWSPSetSockOpt 함수는 모든 형식의 소켓과 연결된 소켓 옵션의 현재 값을 모든 상태로 설정합니다. 옵션은 여러 프로토콜 수준에서 존재할 수 있지만 항상 가장 높은 소켓 수준에 있습니다. 옵션은 소켓에서 브로드캐스트 메시지를 보낼 수 있는지 여부와 같은 소켓 작업에 영향을 줍니다.

소켓 옵션에는 기능 또는 동작을 사용하거나 사용하지 않도록 설정하는 부울 옵션과 정수 값 또는 구조가 필요한 옵션의 두 가지 유형이 있습니다. 부울 옵션을 사용하도록 설정하려면 optval 이 0이 아닌 정수로 가리킵니다. 옵션을 사용하지 않도록 설정하려면 optval 이 0과 같은 정수로 가리킵니다. optlen 매개 변수는 부울 옵션의 sizeof(int)와 같아야 합니다. 다른 옵션의 경우 optval 은 옵션에 대해 원하는 값을 포함하는 정수 또는 구조를 가리키고 optlen 은 정수 또는 구조체의 길이입니다.

소켓 옵션에 대한 자세한 내용은 소켓 옵션을 참조하세요.

level = SOL_SOCKET

Type 의미
SO_BROADCAST BOOL 소켓에서 브로드캐스트 메시지를 전송하고 수신할 수 있도록 합니다.
SO_DEBUG BOOL 디버깅 정보를 기록합니다.
SO_DONTLINGER BOOL 예약되어 있습니다.
SO_DONTROUTE BOOL 비활성화된 라우팅: 인터페이스로 직접 보냅니다. 이 소켓 옵션을 설정하면 성공하지만 AF_INET 소켓에서는 무시됩니다. 는 WSAENOPROTOOPT 를 사용하여 AF_INET6 소켓에서 실패합니다. 이 옵션은 ATM 소켓에서 지원되지 않습니다(오류 발생).
SO_GROUP_PRIORITY int 예약되어 있습니다.
SO_KEEPALIVE BOOL keep-alive를 보냅니다. ATM 소켓에서 지원되지 않습니다(오류가 발생).
SO_LINGER struct linger 들여쓰지 않은 데이터가 있는 경우 닫을 때 남아 있습니다.
SO_OOBINLINE BOOL 일반 데이터 스트림에서 OOB 데이터를 받습니다.
SO_RCVBUF int 받기용으로 예약된 소켓당 버퍼 공간 전체를 지정합니다. 이는 SO_MAX_MSG_SIZE 관련이 없으며 반드시 TCP 수신 창의 크기에 해당하지는 않습니다.
SO_REUSEADDR BOOL 소켓이 이미 사용 중인 주소에 바인딩될 수 있습니다. ( 바인딩을 참조하세요.) ATM 소켓에는 적용되지 않습니다.
SO_SNDBUF int 보내기용으로 예약된 소켓당 버퍼 공간 전체를 지정합니다. 이는 SO_MAX_MSG_SIZE 관련이 없으며 반드시 TCP 송신 창의 크기에 해당하지는 않습니다.
PVD_CONFIG 서비스 공급자 종속 이 개체는 소켓 s와 연결된 서비스 공급자에 대한 구성 정보를 저장 합니다. 이 데이터 구조의 정확한 형식은 서비스 공급자별로 다릅니다.

 

지원되지 않는 옵션을 사용하여 LPWSPGetSockopt를 호출하면 lpErrno에서 WSAENOPROTOOPT 오류 코드가 반환됩니다.

SO_DEBUG

Windows Sockets SPI 클라이언트에서 SO_DEBUG 옵션을 설정한 경우 출력 디버그 정보를 제공하려면 Windows 소켓 서비스 공급자를 권장하지만 필수는 아닙니다. 디버그 정보 및 형식을 생성하는 메커니즘은 이 사양의 scope.

SO_GROUP_PRIORITY

예약되어 있습니다.

SO_KEEPALIVE

Windows 소켓 SPI 클라이언트는 TCP/IP 공급자가 SO_KEEPALIVE 소켓 옵션을 켜 TCP 연결에서 유지 패킷을 사용하도록 요청할 수 있습니다. Windows 소켓 공급자는 keep-alives 사용을 지원할 필요가 없습니다. 이 경우 정확한 의미 체계는 구현에 따라야 하지만 RFC 1122: 인터넷 호스트 요구 사항- 통신 계층의 섹션 4.2.3.6을 준수해야 합니다. (이 리소스는 영어로만 사용할 수 있습니다.) 연결 유지의 결과로 연결이 끊어지면 오류 코드 WSAENETRESET 이 소켓에서 진행 중인 모든 호출에 반환되고 후속 호출은 WSAENOTCONN 으로 실패합니다.

SO_LINGER

SO_LINGER 소켓에서 데이터가 큐에 대기되고 LPWSPCloseSocket 이 수행될 때 수행되는 작업을 제어합니다. SO_LINGER 설정이 LPWSPCloseSocket의 의미 체계에 영향을 주는 방법에 대한 설명은 LPWSPCloseSocket을 참조하세요. Windows Sockets SPI 클라이언트는 다음 요소를 사용하여 optval 매개 변수가 가리키는 LINGER 구조를 만들어 원하는 동작을 설정합니다.

struct linger {
  u_short l_onoff;
  u_short l_linger;
}

SO_LINGER 사용하도록 설정하려면 Windows 소켓 SPI 클라이언트가 l_onoff 0이 아닌 값으로 설정하고, l_linger 0 또는 원하는 시간 제한(초)으로 설정하고, LPWSPSetSockOpt를 호출해야 합니다. SO_DONTLINGER, 즉 SO_LINGER 사용하지 않도록 설정하려면 l_onoff 0으로 설정하고 LPWSPSetSockOpt를 호출해야 합니다. 비 차단 소켓에서 0이 아닌 시간 제한으로 SO_LINGER 사용하도록 설정하는 것은 권장되지 않습니다. 자세한 내용은 LPWSPCloseSocket을 참조하세요.

SO_LINGER 사용하도록 설정하면 SO_DONTLINGER 비활성화되고 그 반대의 경우도 마찬가지입니다. SO_DONTLINGER 사용하지 않도록 설정된 경우(즉, SO_LINGER 사용하도록 설정됨) 시간 제한 값이 지정되지 않습니다. 이 경우 사용된 시간 제한은 구현에 따라 달라집니다. 소켓에 대해 이전 제한 시간이 설정된 경우( SO_LINGER 사용하도록 설정) 서비스 공급자가 이 시간 제한 값을 복원해야 합니다.

SO_REUSEADDR

기본적으로 소켓은 이미 사용 중인 로컬 주소에 바인딩할 수 없습니다(자세한 내용은 LPWSPBind 참조). 그러나 경우에 따라 이러한 방식으로 주소를 다시 사용하는 것이 바람직할 수 있습니다. 모든 연결은 로컬 주소와 원격 주소의 조합으로 고유하게 식별되므로 원격 주소가 다르면 동일한 로컬 주소에 두 개의 소켓이 바인딩되는 데 문제가 없습니다. 소켓의 LPWSPBind가 이미 다른 소켓에서 사용 중인 로컬 주소에 바인딩할 수 있도록 허용해야 한다는 것을 Windows 소켓 공급자에게 알리려면 Windows Sockets SPI 클라이언트는 LPWSPBind를 실행하기 전에 소켓에 대한 SO_REUSEADDR 소켓 옵션을 설정해야 합니다. 옵션은 LPWSPBind 당시에만 해석됩니다. 따라서 기존 주소에 바인딩되지 않는 소켓에서 옵션을 설정하고 LPWSPBind 가 이 소켓 또는 다른 소켓에 영향을 주지 않으면 옵션을 설정하거나 다시 설정하는 것은 불필요하지만 무해합니다.

SO_SNDBUF

Windows 소켓 구현이 SO_RCVBUFSO_SNDBUF 옵션을 지원하는 경우 Windows Sockets SPI 클라이언트는 다른 버퍼 크기(크거나 작음)를 요청할 수 있습니다. 서비스 공급자가 요청된 전체 금액을 사용할 수 없더라도 호출이 성공할 수 있습니다. Windows 소켓 SPI 클라이언트는 실제로 제공된 버퍼 크기를 확인하기 위해 동일한 옵션으로 LPWSPGetSockopt 를 호출해야 합니다.

PVD_CONFIG

이 개체는 소켓과 연결된 서비스 공급자에 대한 구성 정보를 저장 합니다. 이 데이터 구조의 정확한 형식은 서비스 공급자에 따라 다릅니다.

요구 사항

요구 사항
지원되는 최소 클라이언트 Windows 2000 Professional[데스크톱 앱만]
지원되는 최소 서버 Windows 2000 Server[데스크톱 앱만]
머리글 ws2spi.h

추가 정보

LPWSPBind

LPWSPEventSelect

LPWSPGetSockopt

LPWSPIoctl

LPWSPSocket