다음을 통해 공유


LPWSPGETOVERLAPPEDRESULT 콜백 함수(ws2spi.h)

LPWSPGetOverlappedResult 함수는 지정된 소켓에서 겹치는 작업의 결과를 반환합니다.

구문

LPWSPGETOVERLAPPEDRESULT Lpwspgetoverlappedresult;

BOOL Lpwspgetoverlappedresult(
  [in]  SOCKET s,
  [in]  LPWSAOVERLAPPED lpOverlapped,
  [out] LPDWORD lpcbTransfer,
  [in]  BOOL fWait,
  [out] LPDWORD lpdwFlags,
  [out] LPINT lpErrno
)
{...}

매개 변수

[in] s

소켓을 식별합니다. LPWSPRecv, LPWSPRecvFrom, LPWSPSend, LPWSPSendTo 또는 LPWSPIoctl대한 호출로 겹치는 작업이 시작될 때 지정한 것과 동일한 소켓입니다.

[in] lpOverlapped

겹치는 작업이 시작될 때 지정된 WSAOverlapped 구조체에 대한 포인터입니다.

[out] lpcbTransfer

송신 또는 수신 작업 또는 LPWSPIoctl에 의해 실제로 전송된 바이트 수를 수신하는 32비트 변수에 대한 포인터입니다.

[in] fWait

함수가 보류 중인 겹치는 작업이 완료될 때까지 기다려야 하는지 여부를 지정합니다. TRUE이면 작업이 완료될 때까지 함수가 반환되지 않습니다. FALSE이고 작업이 보류 중인 경우 함수는 FALSE를 반환하고 lpErrno는 WSA_IO_INCOMPLETE. 겹치는 작업에서 이벤트 기반 완료 알림을 선택한 경우에만 fWait 매개 변수를 TRUE 로 설정할 수 있습니다.

[out] lpdwFlags

완료 상태 보완하는 하나 이상의 플래그를 수신할 32비트 변수에 대한 포인터입니다. LPWSPRecv 또는 LPWSPRecvFrom을 통해 겹치는 작업이 시작된 경우 이 매개 변수에는 lpFlags 매개 변수에 대한 결과 값이 포함됩니다.

[out] lpErrno

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

반환 값

LPWSPGetOverlappedResult가 성공하면 반환 값은 TRUE입니다. 즉, 겹치는 작업이 성공적으로 완료되었으며 lpcbTransfer 가 가리키는 값이 업데이트되었습니다. LPWSPGetOverlappedResultFALSE를 반환하는 경우 이는 겹치는 작업이 완료되지 않았거나 겹치는 작업이 완료되었지만 오류 또는 완료 상태 LPWSPGetOverlappedResult에 대한 하나 이상의 매개 변수 오류로 인해 확인할 수 없음을 의미합니다. 실패 시 lpcbTransfer 가 가리키는 값은 업데이트되지 않습니다. lpErrno 매개 변수는 오류의 원인(LPWSPGetOverlappedResult 또는 연결된 겹치는 작업 중 하나)을 나타냅니다.

오류 코드 의미
WSAENETDOWN
네트워크 하위 시스템이 실패했습니다.
WSAENOTSOCK
설명자가 소켓이 아닙니다.
WSA_INVALID_HANDLE
WSAOverlapped 구조체의 **hEvent** 멤버에 유효한 이벤트 개체 핸들이 없습니다.
WSAEINVAL
매개 변수 중 하나는 허용되지 않습니다.
WSA_IO_INCOMPLETE
fWait 매개 변수는 **FALSE**이며 I/O 작업이 아직 완료되지 않았습니다.

설명

LPWSPGetOverlappedResult 함수에서 보고한 결과는 지정된 WSAOverlapped 구조체가 제공된 지정된 소켓의 마지막 겹치는 작업과 작업의 결과가 보류 중인 결과입니다. 보류 중인 작업은 작업을 시작한 함수가 SOCKET_ERROR 반환하고 lpErrno 가 WSA_IO_PENDING 때 표시됩니다. I/O 작업이 보류 중인 경우 작업을 시작한 함수는 WSAOVERLAPPED 구조체의 hEvent 멤버를 서명되지 않은 상태로 다시 설정합니다. 그런 다음 보류 중인 작업이 완료되면 시스템에서 이벤트 개체를 신호 상태로 설정합니다.

fWait 매개 변수가 TRUE이면 LPWSPGetOverlappedResult는 이벤트 개체가 신호 상태가 될 때까지 차단하고 대기하여 보류 중인 작업이 완료되었는지 여부를 결정합니다. 클라이언트는 I/O 작업이 요청되었을 때 이벤트 기반 완료 알림을 선택한 경우에만 fWait 매개 변수를 TRUE 로 설정할 수 있습니다. 다른 형태의 알림을 선택한 경우 WSAOverlapped 구조체의 hEvent 멤버 사용이 다르며 fWaitTRUE로 설정하면 예측할 수 없는 결과가 발생합니다.

참고

지정된 스레드에서 시작한 모든 I/O는 해당 스레드가 종료될 때 취소됩니다. 겹치는 소켓의 경우 작업이 완료되기 전에 스레드가 닫히면 보류 중인 비동기 작업이 실패할 수 있습니다. 자세한 내용은 ExitThread 를 참조하세요.

 

WPUCompleteOverlappedRequest와의 상호 작용

WPUCompleteOverlappedRequest의 동작은 WSAOverlapped 구조체의 OffsetOffsetHigh 멤버만 LPWSPGetOverlappedResult에 의해 구조체에서 검색되어야 하더라도 서비스 공급자가 단독으로 제어하므로 서비스 공급자가 LPWSPGetOverlappedResult를 구현하는 방법에 대한 몇 가지 제약 조건을 배치합니다. 서비스 공급자는 WPUCompleteOverlappedRequest 의 동작과 제대로 상호 작용하는 한 어떤 방식으로든 이 작업을 수행할 수 있습니다. 다음 설명은 일반적인 구현을 제공합니다.

겹치는 처리가 시작될 때 서비스 공급자는 내부 를 WSS_OPERATION_IN_PROGRESS 설정합니다.

I/O 작업이 완료되면 공급자는 OffsetHigh 를 작업으로 인한 Windows 소켓 2 오류 코드로 설정하고, 오프셋 을 I/O 작업으로 인한 플래그로 설정하고, WPUCompleteOverlappedRequest를 호출하여 전송 바이트 수를 매개 변수 중 하나로 전달합니다. WPUCompleteOverlappedRequest 는 결국 InternalHigh 를 전송 바이트 수 로 설정한 다음 Internal를 WSS_OPERATION_IN_PROGRESS 이외의 값으로 설정합니다.

LPWSPGetOverlappedResult가 호출되면 서비스 공급자는 내부를 확인합니다. WSS_OPERATION_IN_PROGRESS 경우 공급자는 hEvent 멤버의 이벤트 핸들을 기다리거나 LPWSPGetOverlappedResultfWait 플래그 설정에 따라 오류를 반환합니다. 진행 중이 아니거나 대기가 완료된 후 공급자는 InternalHigh, OffsetHighOffset 의 값을 각각 전송 수, 작업 결과 오류 코드 및 플래그로 반환합니다.

요구 사항

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

추가 정보

WPUCompleteOverlappedRequest

LPWSPAccept

LPWSPConnect

LPWSPIoctl

LPWSPRecv

LPWSPRecvFrom

LPWSPSend

LPWSPSendTo