LPWSPBIND 콜백 함수(ws2spi.h)
LPWSPBind 함수는 로컬 주소(즉, 이름)를 소켓과 연결합니다.
구문
LPWSPBIND Lpwspbind;
int Lpwspbind(
[in] SOCKET s,
[in] const sockaddr *name,
[in] int namelen,
[out] LPINT lpErrno
)
{...}
매개 변수
[in] s
언바운드 소켓을 식별하는 설명자입니다.
[in] name
소켓에 할당할 주소( sockaddr 구조체 형식)입니다.
sa_family 멤버를 제외하고 sockaddr 콘텐츠는 네트워크 바이트 순서로 표현됩니다. Windows Sockets 2에서 name 매개 변수는 sockaddr 구조체에 대한 포인터로 엄격하게 해석되지 않습니다. Winsock 호환성을 위해 이러한 방식으로 캐스팅됩니다. 실제 구조는 다른 주소 패밀리의 컨텍스트에서 다르게 해석됩니다. 유일한 요구 사항은 첫 번째 u_short 주소 패밀리이고 메모리 버퍼의 총 크기(바이트)가 namelen이라는 것입니다.
[in] namelen
name 매개 변수가 가리키는 구조체의 길이(바이트)입니다.
[out] lpErrno
오류 코드에 대한 포인터입니다.
반환 값
오류가 발생하지 않으면 LPWSPBind는 0을 반환합니다. 그렇지 않으면 SOCKET_ERROR 반환하고 lpErrno에서 특정 오류 코드를 사용할 수 있습니다.
오류 코드 | 의미 |
---|---|
네트워크 하위 시스템이 실패했습니다. | |
로컬 컴퓨터의 일부 프로세스는 이미 동일한 정규화된 주소(예: **AF_INET** 사례의 IP 주소 및 포트)에 바인딩되어 있으며 소켓이 SO_REUSEADDR 주소를 다시 사용할 수 있도록 표시되지 않았습니다. ( LPWSPSetSockOpt 아래의 SO_REUSEADDR 소켓 옵션을 참조하세요.) | |
지정된 주소가 이 컴퓨터의 유효한 주소가 아닙니다. | |
name 또는 namelen 매개 변수가 사용자 주소 공간의 유효한 부분이 아니거나, namelen 매개 변수가 너무 작거나, name 매개 변수에 연결된 주소 패밀리의 주소 형식이 잘못되었거나, 이름으로 지정된 메모리 블록의 처음 두 바이트가 소켓 설명자와 연결된 주소 패밀리와 일치하지 않습니다. | |
콜백이 진행 중일 때 함수가 호출됩니다. | |
소켓이 이미 주소에 바인딩되어 있습니다. | |
사용 가능한 버퍼가 충분하지 않고 연결이 너무 많습니다. | |
설명자가 소켓이 아닙니다. |
설명
LPWSPBind 함수는 LPWSPConnect 또는 LPWSPListen 함수에 대한 후속 호출 전에 연결되지 않은 연결 없는 또는 연결 지향 소켓 에서 사용됩니다. LPWSPSocket을 사용하여 소켓을 만들 때 네임스페이스(주소 패밀리)에 존재하지만 이름 또는 로컬 주소가 할당되지 않습니다. LPWSPBind 함수는 명명되지 않은 소켓에 로컬 이름을 할당하여 소켓의 로컬 연결을 설정합니다.
예를 들어 인터넷 주소 패밀리에서 이름은 주소 패밀리, 호스트 주소 및 Winsock SPI 클라이언트를 식별하는 포트 번호의 세 부분으로 구성됩니다. Windows Sockets 2에서 name 매개 변수는 sockaddr 구조체에 대한 포인터로 엄격하게 해석되지 않습니다. 서비스 공급자는 namelen 크기의 메모리 블록에 대한 포인터로 간주할 수 있습니다. 이 블록의 처음 두 바이트(sockaddr 선언의 sa_family 해당)에는 소켓을 만드는 데 사용된 주소 패밀리가 포함되어야 합니다. 그렇지 않으면 WSAEFAULT 오류가 표시됩니다.
Windows Sockets 2 SPI 클라이언트가 할당된 로컬 주소를 신경 쓰지 않는 경우 name 매개 변수의 sa_data 멤버에 ADDR_ANY 매니페스트 상수 값을 지정합니다. 그러면 서비스 공급자가 적절한 네트워크 주소를 사용하도록 지시합니다. TCP/IP의 경우 포트가 0으로 지정된 경우 서비스 공급자는 1024에서 5000 사이의 값으로 Winsock SPI 클라이언트에 고유한 포트를 할당합니다. SPI 클라이언트는 LPWSPBind 이후 LPWSPGetSockName을 사용하여 주소와 할당된 포트를 학습할 수 있습니다. 그러나 인터넷 주소가 INADDR_ANY 동일한 경우 호스트가 다중 호스트인 경우 여러 주소가 유효할 수 있으므로 소켓이 연결될 때까지 LPWSPGetSockOpt 에서 반드시 주소를 제공할 수 있는 것은 아닙니다.
요구 사항
요구 사항 | 값 |
---|---|
지원되는 최소 클라이언트 | Windows 2000 Professional[데스크톱 앱만] |
지원되는 최소 서버 | Windows 2000 Server[데스크톱 앱만] |
머리글 | ws2spi.h |