Share via


LPWSPSOCKET 콜백 함수(ws2spi.h)

LPWSPSocket 함수는 소켓을 만듭니다. 공유 소켓을 만들 때 LPWSPSocket 에서 수행한 파트에 대한 자세한 내용은 SPI의 공유 소켓공유 소켓을 참조하세요.

구문

LPWSPSOCKET Lpwspsocket;

SOCKET Lpwspsocket(
  [in]  int af,
  [in]  int type,
  [in]  int protocol,
  [in]  LPWSAPROTOCOL_INFOW lpProtocolInfo,
  [in]  GROUP g,
        DWORD dwFlags,
  [out] LPINT lpErrno
)
{...}

매개 변수

[in] af

주소 패밀리 사양입니다.

[in] type

새 소켓의 형식 사양입니다.

[in] protocol

표시된 주소 패밀리와 관련된 소켓과 함께 사용할 프로토콜입니다.

[in] lpProtocolInfo

만들 소켓의 특성을 정의하는 WSAProtocol_Info 구조체에 대한 포인터입니다.

[in] g

예약되어 있습니다.

dwFlags

소켓 특성 사양입니다.

[out] lpErrno

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

반환 값

오류가 발생하지 않으면 LPWSPSocket 은 새 소켓을 참조하는 설명자를 반환합니다. 그렇지 않으면 INVALID_SOCKET 값이 반환되고 lpErrno에서 특정 오류 코드를 사용할 수 있습니다.

오류 코드 의미
WSAENETDOWN
네트워크 하위 시스템이 실패했습니다.
WSAEAFNOSUPPORT
지정된 주소 패밀리는 지원되지 않습니다.
WSAEINPROGRESS
Windows 소켓 호출 차단이 진행 중이거나 서비스 공급자가 여전히 콜백 함수를 처리하고 있습니다.
WSAEMFILE
더 이상 소켓 설명자를 사용할 수 없습니다.
WSAENOBUFS
사용할 수 있는 버퍼 공간이 없습니다. 소켓을 만들 수 없습니다.
WSAEPROTONOSUPPORT
지정한 프로토콜이 지원되지 않습니다.
WSAEPROTOTYPE
지정된 프로토콜이 이 소켓의 잘못된 형식입니다.
WSAESOCKTNOSUPPORT
지정된 소켓 유형은 이 주소 패밀리에서 지원되지 않습니다.
WSAEINVAL
지정한 매개 변수 g 가 잘못되었습니다.
 

설명

LPWSPSocket 함수는 소켓 설명자 및 관련 리소스를 할당합니다. 기본적으로 생성된 소켓에는 겹치는 특성이 없습니다. Windows 소켓 공급자는 Windows 설치 가능한 파일 시스템으로 실현하고 시스템 파일 핸들을 소켓 설명자로 제공하는 것이 좋습니다. 이러한 공급자는 이 함수에서 반환하기 전에 WPUModifyIFSHandle 을 호출해야 합니다. 비파일 시스템 Windows 소켓 공급자의 경우 이 함수에서 반환하기 전에 WPUCreateSocketHandle 을 사용하여 Ws2_32.dll 고유한 소켓 설명자를 획득해야 합니다. 참조
자세한 내용은 설명자 할당 입니다.

af, typeprotocol 값은 해당 API 함수 소켓 또는 WSASocket에서 애플리케이션에서 제공하는 값입니다. 서비스 공급자는 특정 프로토콜에 적합하기 때문에 이러한 값의 전부 또는 전부를 무시하거나 주의할 수 있습니다. 그러나 Ws2_32.dll 와일드카드 값으로 간주하므로 공급자는 aftype에 대해 0 값을 기꺼이 수락해야 합니다. 또한 af, typeprotocol에 대해 매니페스트 상수 FROM_PROTOCOL_INFO 값을 수락해야 합니다. 이 값은 Windows Sockets 2 애플리케이션이 WSAProtocol_Info 구조체(iAddressFamily, iSocketType, iProtocol)의 해당 값을 사용해야 했음을 나타냅니다.

dwFlags 매개 변수는 다음 플래그와 함께 비트 OR 연산자를 사용하여 소켓의 특성을 지정하는 데 사용할 수 있습니다.

플래그 의미
WSA_FLAG_OVERLAPPED 이 플래그를 사용하면 겹치는 소켓이 만들어집니다. 겹치는 소켓은 겹치는 I/O 작업에 LPWSPSend, LPWSPSendTo, LPWSPRecv, LPWSPRecvFromLPWSPIoctl 을 활용하여 여러 작업을 동시에 시작하고 처리할 수 있습니다. 겹치는 작업을 허용하는 모든 함수는 겹치는 작업과 관련된 매개 변수 값이 null인 경우 겹치는 소켓에서 오버랩되지 않은 사용도 지원합니다.
WSA_FLAG_MULTIPOINT_C_ROOT 만든 소켓이 다중 포인트 세션의 c_root 됨을 나타냅니다. 프로토콜의 WSAProtocol_Info 구조에 루팅된 컨트롤 플레인이 표시되는 경우에만 허용됩니다.
WSA_FLAG_MULTIPOINT_C_LEAF 만든 소켓이 멀티캐스트 세션의 c_leaf 있음을 나타냅니다. 프로토콜 의 WSAProtocol_Info 구조에 XP1_SUPPORT_MULTIPOINT 표시되는 경우에만 허용됩니다.
WSA_FLAG_MULTIPOINT_D_ROOT 만든 소켓이 다중 포인트 세션의 d_root 됨을 나타냅니다. 루트 데이터 평면이 프로토콜의 WSAProtocol_Info 구조에 표시되는 경우에만 허용됩니다.
WSA_FLAG_MULTIPOINT_D_LEAF 만든 소켓이 다중 포인트 세션의 d_leaf 됨을 나타냅니다. 프로토콜 의 WSAProtocol_Info 구조에 XP1_SUPPORT_MULTIPOINT 표시되는 경우에만 허용됩니다.

참고

멀티포인트 소켓의 경우 정확히 하나의 WSA_FLAG_MULTIPOINT_C_ROOT 또는 WSA_FLAG_MULTIPOINT_C_LEAF 지정해야 하며 정확히 WSA_FLAG_MULTIPOINT_D_ROOT 또는 WSA_FLAG_MULTIPOINT_D_LEAF 중 하나를 지정해야 합니다. 자세한 내용은 SPI의 프로토콜 독립적 멀티캐스트 및 멀티포인트를 참조하세요.

SOCK_STREAM 같은 연결 지향 소켓은 전체 이중 연결을 제공하며, 데이터를 보내거나 받기 전에 연결된 상태여야 합니다. LPWSPConnect 호출을 사용하여 다른 소켓에 대한 연결이 만들어집니다. 연결되면 LPWSPSend 및 LPWSPRecv 호출을 사용하여 데이터를 전송할 수 있습니다. 세션이 완료되면 LPWSPCloseSocket 을 수행해야 합니다.

신뢰할 수 있는 연결 지향 소켓을 구현하는 데 사용되는 통신 프로토콜은 데이터가 손실되거나 중복되지 않도록 합니다. 피어 프로토콜에 버퍼 공간이 있는 데이터가 적절한 시간 내에 성공적으로 전송될 수 없는 경우 연결이 끊어진 것으로 간주되고 WSAETIMEDOUT으로 설정된 오류 코드로 인해 후속 호출이 실패합니다.

연결이 없는 메시지 지향 소켓을 사용하면 LPWSPSendTo 및 LPWSPRecvFrom을 사용하여 임의 피어로 데이터그램을 보내고 받을 수 있습니다. 이러한 소켓이 LPWSPConnect 를 사용하여 특정 피어에 연결된 경우 LPWSPSend 를 사용하여 해당 피어로 데이터그램을 보낼 수 있으며 LPWSPRecv를 사용하여 이 피어에서 (만) 수신할 수 있습니다.

SOCK RAW 형식의 소켓에 대한 지원은 필요하지 않지만 서비스 공급자는 그렇게 하는 것이 합리적일 때마다 원시 소켓을 지원하는 것이 좋습니다.

계층화된 서비스 공급자는 이 함수의 구현을 제공하지만 프로토콜 체인에서 다음 계층의 LPWSPSocket 을 호출할 때 이 함수의 클라이언트이기도 합니다. 프로토콜 체인의 계층을 통해 전파되므로 이 함수의 lpProtocolInfo 매개 변수에는 몇 가지 특별한 고려 사항이 적용됩니다.

프로토콜 체인의 다음 계층이 다른 계층인 경우 다음 계층의 LPWSPSocket이 호출될 때 이 계층은 수정되지 않은 동일한 체인 정보를 사용하여 수정되지 않은 동일한 WSAProtocol_Info 구조를 참조하는 lpProtocolInfo를 다음 계층에 전달해야 합니다. 그러나 다음 계층이 기본 프로토콜(즉, 체인의 마지막 요소)인 경우 이 계층은 기본 공급자의 LPWSPSocket을 호출할 때 대체를 수행합니다. 이 경우 lpProtocolInfo 매개 변수에서 기본 공급자의 WSAPROTOCOL_INFO 구조를 참조해야 합니다.

이 정책의 중요한 이점 중 하나는 기본 서비스 공급자가 프로토콜 체인을 인식할 필요가 없다는 것입니다.

이 동일한 전파 정책은 LPWSPAddressToString, LPWSPDuplicateSocket, WSPStartup 또는 LPWSPStringToAddress와 같은 다른 함수의 계층화된 시퀀스를 통해 WSAProtocol_Info구조를 전파 때 적용됩니다.

요구 사항

요구 사항
지원되는 최소 클라이언트 Windows 2000 Professional[데스크톱 앱만]
지원되는 최소 서버 Windows 2000 Server[데스크톱 앱만]
대상 플랫폼 Windows
헤더 ws2spi.h

추가 정보