Share via


LPWSPCONNECT 콜백 함수(ws2spi.h)

LPWSPConnect 함수는 피어에 대한 연결을 설정하고, 연결 데이터를 교환하고, 제공된 흐름 사양에 따라 필요한 서비스 품질을 지정합니다.

구문

LPWSPCONNECT Lpwspconnect;

int Lpwspconnect(
  [in]  SOCKET s,
  [in]  const sockaddr *name,
  [in]  int namelen,
  [in]  LPWSABUF lpCallerData,
  [out] LPWSABUF lpCalleeData,
  [in]  LPQOS lpSQOS,
  [in]  LPQOS lpGQOS,
  [out] LPINT lpErrno
)
{...}

매개 변수

[in] s

연결되지 않은 소켓을 식별하는 설명자입니다.

[in] name

sockaddr의 소켓을 연결할 피어의 이름입니다.

[in] namelen

이름의 길이(바이트)입니다.

[in] lpCallerData

연결 설정 중에 피어로 전송할 사용자 데이터에 대한 포인터입니다.

[out] lpCalleeData

연결 설정 중에 피어에서 받은 모든 사용자 데이터를 복사할 수 있는 버퍼에 대한 포인터입니다.

[in] lpSQOS

각 방향에 대해 하나씩 소켓 흐름 사양에 대한 포인터입니다.

[in] lpGQOS

예약되어 있습니다.

[out] lpErrno

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

반환 값

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

차단 소켓에서 반환 값은 연결 시도의 성공 또는 실패를 나타냅니다. 반환 오류 코드가 연결 시도 실패(즉, WSAECONNREFUSED, WSAENETUNREACH, WSAETIMEDOUT)를 나타내는 경우 Winsock SPI 클라이언트는 동일한 소켓에 대해 LPWSPConnect 를 다시 호출할 수 있습니다.

오류 코드 의미
WSAENETDOWN
네트워크 하위 시스템이 실패했습니다.
WSAEADDRINUSE
소켓의 로컬 주소가 이미 사용 중이며 SO_REUSEADDR 주소를 다시 사용할 수 있도록 소켓이 표시되지 않았습니다. 이 오류는 일반적으로 바인딩 시 발생하지만 바인딩이 부분적으로 와일드카드 주소(ADDR_ANY 포함)에 있고 이 함수 당시 특정 주소를 커밋해야 하는 경우 이 함수까지 지연될 수 있습니다.
WSAEINTR
(차단) 호출이 LPWSPCancelBlockingCall을 통해 취소되었습니다.
WSAEINPROGRESS
Winsock 호출 차단이 진행 중이거나 서비스 공급자가 여전히 콜백 함수를 처리하고 있습니다.
WSAEALREADY
지정된 소켓에서 LPWSPConnect 를 차단하지 않는 호출이 진행 중입니다.
이전 버전과의 호환성을 유지하기 위해 이 오류는 Winsock.dll 또는 Wsock32.dll 연결되는 Windows Sockets 1.1 애플리케이션에 대한 WSAEINVAL로 보고됩니다.
WSAEADDRNOTAVAIL
원격 주소가 유효한 주소가 아닙니다(예: ADDR_ANY).
WSAEAFNOSUPPORT
지정된 패밀리의 주소는 이 소켓에서 사용할 수 없습니다.
WSAECONNREFUSED
연결 시도가 거부되었습니다.
WSAEFAULT
이름 또는 namelen 매개 변수가 사용자 주소 공간의 유효한 부분이 아니거나, namelen 매개 변수가 너무 작거나, lpCalleeData, lpSQOSlpGQOS의 버퍼 길이가 너무 작거나, lpCallerData의 버퍼 길이가 너무 큽니다.
WSAEINVAL
매개 변수 s 는 수신 대기 소켓입니다.
WSAEISCONN
소켓이 이미 연결되어 있습니다(연결 지향 소켓에만 해당).
WSAENETUNREACH
현재 이 호스트에서 네트워크에 연결할 수 없습니다.
WSAENOBUFS
사용할 수 있는 버퍼 공간이 없습니다. 소켓을 연결할 수 없습니다.
WSAENOTSOCK
설명자가 소켓이 아닙니다.
WSAEOPNOTSUPP
lpSQOS에 지정된 흐름 사양을 충족할 수 없습니다.
WSAEPROTONOSUPPORT
lpCallerData 보강은 서비스 공급자에서 지원되지 않습니다.
WSAETIMEDOUT
연결을 설정하지 않고 연결 시도가 시간 초과되었습니다.
WSAEWOULDBLOCK
소켓이 차단 해제로 표시되고 연결을 즉시 완료할 수 없습니다. ** WSPSelect** 함수를 사용하여 연결하는 동안 LPWSPSelect 함수를 사용하여 소켓을 선택하여 쓰기용으로 선택할 수 있습니다.
WSAEACCES
WSPSetSockOpt SO_BROADCAST 사용하도록 설정되지 않아 데이터그램 소켓을 브로드캐스트 주소에 연결하지 못했습니다.

설명

이 함수는 지정된 대상에 대한 연결을 만들고 연결 시 발생하는 여러 가지 다른 보조 작업을 수행하는 데 사용됩니다. 소켓이 바인딩되지 않은 경우 고유 값이 시스템에 의해 로컬 연결에 할당되고 소켓이 바인딩된 것으로 표시됩니다.

연결 지향 소켓(예: SOCK_STREAM 입력)의 경우 이름 (소켓 네임스페이스의 주소)을 사용하여 지정된 호스트에 대한 활성 연결이 시작됩니다. 자세한 설명은 LPWSPBind를 참조하세요. 이 호출이 성공적으로 완료되면 소켓이 데이터를 보내고 받을 준비가 됩니다. 이름 구조의 주소 멤버가 모두 0이면 LPWSPConnectWSAEADDRNOTAVAIL 오류를 반환합니다. 활성 연결을 다시 연결하려는 시도는 오류 코드 WSAEISCONN으로 실패합니다.

연결 지향 비블로킹 소켓의 경우 연결을 즉시 완료할 수 없는 경우가 많습니다. 이 경우 이 함수는 WSAEWOULDBLOCK 오류와 함께 를 반환하지만 작업이 진행됩니다. 성공 또는 실패 결과가 알려지면 클라이언트가 알림을 등록하는 방법에 따라 여러 가지 방법 중 하나로 보고될 수 있습니다. 클라이언트가 LPWSPSelect를 사용하는 경우 writefds 집합에서 성공이 보고되고 예외 집합에 오류가 보고 됩니다 . 클라이언트가 LPWSPAsyncSelect 또는 LPWSPEventSelect를 사용하는 경우 FD_CONNECT 알림이 발표되고 FD_CONNECT 연결된 오류 코드는 성공 또는 특정 실패 이유를 나타냅니다.

연결 없는 소켓(예: SOCK_DGRAM 형식)의 경우 LPWSPConnect 에서 수행하는 작업은 후속 연결 지향 송신 및 수신 작업(LPWSPSend, LPWSPRecv)과 함께 소켓을 사용할 수 있도록 기본 대상 주소를 설정하는 것입니다. 지정된 대상 주소 이외의 주소에서 받은 모든 데이터그램은 삭제됩니다. 이름 구조의 주소 멤버가 모두 0이면 소켓의 연결이 끊어집니다. 기본 원격 주소는 확정되지 않으므로 LPWSPSendLPWSPRecv 호출은 오류 코드 WSAENOTCONN을 반환합니다. 그러나 LPWSPSendToLPWSPRecvFrom 은 여전히 사용할 수 있습니다. 소켓이 이미 연결된 경우에도 LPWSPConnect 를 다시 호출하면 기본 대상을 변경할 수 있습니다. 이름이 이전 LPWSPConnect와 다른 경우 수신 대기 중인 모든 데이터그램은 삭제됩니다.

연결이 없는 소켓의 경우 이름은 브로드캐스트 주소를 포함하여 유효한 주소를 나타낼 수 있습니다. 그러나 브로드캐스트 주소에 연결하려면 소켓에 WSPSetSockOpt SO_BROADCAST 사용하도록 설정되어 있어야 합니다. 그렇지 않으면 오류 코드 WSAEACCES와 함께 LPWSPConnect가 실패합니다.

연결이 없는 소켓에서는 사용자 간 데이터 교환이 불가능하며 해당 매개 변수는 자동으로 무시됩니다.

Winsock SPI 클라이언트는 지정한 매개 변수가 직접 또는 간접적으로 가리키는 메모리 공간을 할당합니다.

lpCallerData는 연결 요청과 함께 보낼 사용자 데이터를 포함하는 값 매개 변수입니다. lpCallerData가 null이면 피어에 사용자 데이터가 전달되지 않습니다. lpCalleeData는 연결 설정의 일부로 피어에서 다시 전달된 모든 사용자 데이터를 참조하는 결과 매개 변수입니다. lpCalleeData-len>은 처음에 Winsock SPI 클라이언트에서 할당하고 lpCalleeData-buf>가 가리키는 버퍼의 길이를 포함합니다. 사용자 데이터가 다시 전달되지 않은 경우 lpCalleeData-len>은 0으로 설정됩니다. lpCalleeData 정보는 연결 작업이 완료되면 유효합니다. 차단 소켓의 경우 LPWSPConnect 함수가 반환되는 경우입니다. 차단되지 않는 소켓의 경우 FD_CONNECT 알림이 발생한 후입니다. lpCalleeData가 null이면 사용자 데이터가 다시 전달되지 않습니다. 사용자 데이터의 정확한 형식은 소켓이 속한 주소 패밀리 및/또는 관련된 애플리케이션과 관련이 있습니다.

연결 시 Winsock SPI 클라이언트는 lpSQOS 매개 변수를 사용하여 SIO_SET_QOS opcode를 사용하여 LPWSPIoctl 을 통해 소켓에 대해 만든 이전 QoS 사양을 재정의할 수 있습니다.

lpSQOS는 각 방향에 대해 하나씩 소켓 흐름 사양과 추가 공급자별 매개 변수를 지정합니다. 일반적으로 연결된 전송 공급자 또는 특정 유형의 소켓이 QoS 요청을 처리할 수 없는 경우 아래와 같이 오류가 반환됩니다. 단방향 소켓에 대해 송신 또는 수신 흐름 사양 값은 각각 무시됩니다. 공급자별 매개 변수가 제공되지 않으면 lpSQOS-ProviderSpecific>의 buflen 멤버를 각각 null 및 0으로 설정해야 합니다. lpSQOS에 대한 null 값은 애플리케이션에서 제공하는 서비스 품질이 없음을 나타냅니다.

참고

연결된 소켓이 중단되면(즉, 어떤 이유로든 닫히게 됨) 삭제하고 다시 만들어야 합니다. 연결된 소켓에서 어떤 이유로든 상황이 엉킬 때 Winsock SPI 클라이언트는 안정적인 지점으로 돌아가기 위해 필요한 소켓을 삭제하고 다시 만들어야 한다고 가정하는 것이 가장 안전합니다.

요구 사항

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

추가 정보

LPWSPAccept

LPWSPBind

LPWSPEnumNetworkEvents

LPWSPEventSelect

LPWSPGetSockName

LPWSPGetSockopt

LPWSPSelect

LPWSPSocket