다음을 통해 공유


WPUCompleteOverlappedRequest 함수(ws2spi.h)

WPUCompleteOverlappedRequest 함수는 겹치는 I/O 작업에 대해 겹치는 I/O 완료 알림을 수행합니다.

구문

int WPUCompleteOverlappedRequest(
  [in]  SOCKET          s,
  [in]  LPWSAOVERLAPPED lpOverlapped,
  [in]  DWORD           dwError,
  [in]  DWORD           cbTransferred,
  [out] LPINT           lpErrno
);

매개 변수

[in] s

WPUCreateSocketHandle에서 만든 서비스 공급자 소켓입니다.

[in] lpOverlapped

완료 알림을 받을 겹치는 I/O 작업과 연결된 WSAOVERLAPPED 구조체에 대한 포인터입니다.

[in] dwError

완료 상태 완료를 알려야 하는 겹치는 I/O 작업의 상태.

[in] cbTransferred

클라이언트 버퍼로 전송되거나 클라이언트 버퍼에서 전송되는 바이트 수입니다(전송 방향은 완료 알림을 받을 겹치는 I/O 작업의 송신 또는 수신 특성에 따라 다름).

[out] lpErrno

이 함수의 실행으로 인해 발생하는 오류 코드에 대한 포인터입니다.

반환 값

오류가 발생하지 않으면 WPUCompleteOverlappedRequest는 0을 반환하고 클라이언트가 선택한 메커니즘에 따라 겹치는 I/O 작업의 완료를 알립니다(lpOverlapped에서 참조하는 WSAOVERLAPPED 구조에 있는 이벤트를 알리고 완료 포트가 연결된 경우 소켓과 연결된 완료 포트에 상태 보고서를 큐에 대기함). 그렇지 않으면 WPUCompleteOverlappedRequest 는 SOCKET_ERROR 반환하고 lpErrno에서 특정 오류 코드를 사용할 수 있습니다.

오류 코드 의미
WSAEINVAL
s 매개 변수에 전달된 소켓은 WPUCreateSocketHandle에서 만든 소켓이 아닙니다.

설명

WPUCompleteOverlappedRequest 함수는 클라이언트가 지정한 완료 메커니즘이 사용자 모드-APC(비동기 프로시저 호출) 이외의 항목인 겹치는 I/O 작업에 대해 겹치는 I/O 완료 알림을 수행합니다. 이 함수는 WPUCreateSocketHandle에서 만든 소켓 핸들에만 사용할 수 있습니다.

**참고** 이 함수는 업콜 테이블을 통해 액세스되지 않는다는 측면에서 "WPU" 접두사를 사용하는 다른 함수와 다릅니다. 대신 Ws2_32.dll 직접 내보냅니다. 이 함수를 호출해야 하는 서비스 공급자는 WS2_32.lib와 연결하거나 LoadLibraryGetProcAddress 와 같은 적절한 운영 체제 함수를 사용하여 함수 포인터를 검색해야 합니다.
 
**WPUCompleteOverlappedRequest** 함수는 노출하는 소켓 핸들에 대해 직접 IFS(설치 가능한 파일 시스템) 기능을 구현하지 않는 서비스 공급자에서 사용됩니다. 지정된 완료 알림이 사용자 모드 APC 이외의 겹치는 I/O 요청에 대해 완료 알림을 수행합니다. **WPUCompleteOverlappedRequest**는 WPUCreateSocketHandle 에서 만든 소켓 핸들에만 지원되며 서비스 공급자가 직접 만든 소켓에는 지원되지 않습니다.

클라이언트가 알림 방법으로 사용자 모드 APC를 선택하는 경우 서비스 공급자는 WPUQueueApc 또는 다른 적절한 운영 체제 함수를 사용하여 완료 알림을 수행해야 합니다. 클라이언트에서 사용자 모드 APC를 선택하지 않은 경우 IFS 기능을 직접 구현하지 않는 서비스 공급자는 클라이언트가 완료 포트를 소켓 핸들과 연결했는지 여부를 확인할 수 없습니다. 따라서 완료 알림 메서드가 완료 상태 레코드를 완료 포트로 큐에 대기할지 아니면 WSAOVERLAPPED 구조에 있는 이벤트를 신호해야 하는지 여부를 확인할 수 없습니다. Windows 소켓 2 아키텍처는 WPUCreateSocketHandle 에서 만든 소켓과의 완료 포트 연결을 추적하고 완료 포트 기반 알림 또는 이벤트 기반 알림 간에 올바른 결정을 내릴 수 있습니다.

WPUCompleteOverlappedRequest가 완료 표시를 큐에 추가하면 WSAOVERLAPPED 구조체의 InternalHigh 멤버를 전송된 바이트 수로 설정합니다. 그런 다음 내부 멤버를 특수 값 WSS_OPERATION_IN_PROGRESS 이외의 일부 OS 종속 값으로 설정합니다. 처리가 비동기적으로 발생할 수 있으므로 이러한 값이 표시되기 전에 WPUCompleteOverlappedRequest 가 반환된 후 약간의 지연이 있을 수 있습니다. 그러나 InternalHigh 값(바이트 수)은 Internal 가 설정된 시간까지 설정되도록 보장됩니다.

WPUCompleteOverlappedRequest 는 소켓 핸들이 완료 포트와 연결되었는지 여부에 관계없이 명시된 대로 작동합니다(클라이언트가 요청한 대로 완료 알림을 수행함).

WSPGetOverlappedResult와의 상호 작용

WPUCompleteOverlappedRequest의 동작은 WSAOVERLAPPED 구조체의 OffsetOffsetHigh 멤버만 서비스 공급자에 의해 독점적으로 제어되기 때문에 서비스 공급자가 WSPGetOverlappedResult를 구현하는 방법에 대한 몇 가지 제약 조건을 배치하지만 WSPGetOverlappedResult를 통해 구조체에서 세 값(바이트 수, 플래그 및 오류)을 검색해야 합니다. 서비스 공급자는 WPUCompleteOverlappedRequest 의 동작과 제대로 상호 작용하는 한 어떤 방식으로든 이 작업을 수행할 수 있습니다. 그러나 일반적인 구현은 다음과 같습니다.

  • 겹치는 처리가 시작될 때 서비스 공급자는 내부 를 WSS_OPERATION_IN_PROGRESS 설정합니다.
  • I/O 작업이 완료되면 공급자는 OffsetHigh 를 작업으로 인한 Windows 소켓 2 오류 코드로 설정하고, 오프셋 을 I/O 작업으로 인한 플래그로 설정하고, WPUCompleteOverlappedRequest를 호출하여 전송 바이트 수를 매개 변수 중 하나로 전달합니다. WPUCompleteOverlappedRequest 는 결국 InternalHigh 를 전송 바이트 수 로 설정한 다음 Internal를 WSS_OPERATION_IN_PROGRESS 이외의 값으로 설정합니다.
  • WSPGetOverlappedResult가 호출되면 서비스 공급자는 내부를 확인합니다. WSS_OPERATION_IN_PROGRESS 경우 공급자는 hEvent 멤버의 이벤트 핸들을 기다리거나 WSPGetOverlappedResult의 FWAIT 플래그 설정에 따라 오류를 반환합니다. 진행 중이 아니거나 대기가 완료된 후 공급자는 InternalHigh, OffsetHighOffset 의 값을 각각 전송 수, 작업 결과 오류 코드 및 플래그로 반환합니다.

요구 사항

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

추가 정보

WPUCreateSocketHandle

WPUQueueApc

WSAOVERLAPPED

WSPGetOverlappedResult