다음을 통해 공유


LPFN_RIODEQUEUECOMPLETION 콜백 함수(mswsock.h)

RIODequeueCompletion 함수는 Winsock 등록 I/O 확장에 사용할 I/O 완료 큐에서 항목을 제거합니다.

구문

LPFN_RIODEQUEUECOMPLETION LpfnRiodequeuecompletion;

ULONG LpfnRiodequeuecompletion(
  RIO_CQ CQ,
  PRIORESULT Array,
  ULONG ArraySize
)
{...}

매개 변수

CQ

I/O 완료 큐를 식별하는 설명자입니다.

Array

큐에서 해제된 완료에 대한 설명을 받을 RIORESULT 구조체의 배열입니다.

ArraySize

배열 의 최대 항목 수입니다.

반환 값

오류가 발생하지 않으면 RIODequeueCompletion 함수는 지정된 완료 큐에서 제거된 완료 항목 수를 반환합니다. 그렇지 않으면 CQ 매개 변수에 전달된 RIO_CQ 상태가 메모리 손상 또는 RIO 함수의 오용으로 인해 손상되었음을 나타내기 위해 RIO_CORRUPT_CQ 값이 반환됩니다.

설명

RIODequeueCompletion 함수는 Winsock 등록 I/O 확장을 사용하여 보내기 및 수신 요청을 위한 I/O 완료 큐에서 항목을 제거합니다.

RIODequeueCompletion 함수는 애플리케이션이 완료된 송신 및 수신 요청을 확인할 수 있는 메커니즘입니다. 애플리케이션은 일반적으로 완료 큐가 비어 있지 않을 때 RIONotify 함수에 등록된 메서드를 기반으로 알림을 받은 후 RIODequeueCompletion 함수를 호출합니다. I/O 완료 큐에 대한 알림 동작은 RIO_CQ 만들 때 설정됩니다. 알림 동작을 결정하는 RIO_NOTIFICATION_COMPLETION 구조체는 RIO_CQ 만들 때 RIOCreateCompletionQueue 함수에 전달됩니다.

RIODequeueCompletion 함수가 완료되면 Array 매개 변수에는 큐에서 제거된 완료된 송신 및 수신 요청에 대한 RIORESULT 구조체에 대한 포인터 배열이 포함됩니다. 반환된 RIORESULT 구조체의 멤버는 완료된 요청의 완료 상태 및 전송된 바이트 수에 대한 정보를 제공합니다. 반환된 각 RIORESULT 구조에는 소켓 컨텍스트와 완료된 특정 요청을 식별하는 데 사용할 수 있는 애플리케이션 컨텍스트도 포함됩니다.

CQ 매개 변수에 전달된 I/O 완료 큐가 잘못되었거나 손상되지 않으면 RIODequeueCompletion 함수는 RIO_CORRUPT_CQ 수를 반환합니다.

RIODequeueCompletion 함수는 큐에서 해제할 완료된 송신 또는 수신 요청이 없는 경우 반환되는 값 0을 반환합니다.

요청의 완료가 큐에서 제거된 후에만 시스템은 해당 버퍼 및 버퍼 등록에 대한 연결을 할당량 요금과 함께 해제합니다.

참고

효율성을 위해 완료 큐(RIO_CQ 구조체) 및 요청 큐(RIO_RQ 구조체)에 대한 액세스는 동기화 기본 형식으로 보호되지 않습니다. 여러 스레드에서 완료 또는 요청 큐에 액세스해야 하는 경우 중요한 섹션, 슬림 판독기 쓰기 잠금 또는 유사한 메커니즘을 통해 액세스를 조정해야 합니다. 이 잠금은 단일 스레드의 액세스에 필요하지 않습니다. 다른 스레드는 잠금 없이 별도의 요청/완료 큐에 액세스할 수 있습니다. 동기화의 필요성은 여러 스레드가 동일한 큐에 액세스하려고 할 때만 발생합니다. 송신 및 수신 작업이 소켓의 요청 큐를 사용하기 때문에 여러 스레드 문제가 동일한 소켓에서 보내고 받는 경우에도 동기화가 필요합니다.

 

참고

RIODequeueCompletion 함수에 대한 함수 포인터는 지정된 SIO_GET_MULTIPLE_EXTENSION_FUNCTION_POINTER opcode를 사용하여 WSAIoctl 함수를 호출하여 런타임에 가져와야 합니다. WSAIoctl 함수에 전달된 입력 버퍼에는 값이 Winsock 등록 I/O 확장 함수를 식별하는 GUID(Globally Unique Identifier)인 WSAID_MULTIPLE_RIO 포함되어야 합니다. 성공하면 WSAIoctl 함수에서 반환된 출력에는 Winsock 등록 I/O 확장 함수에 대한 포인터가 포함된 RIO_EXTENSION_FUNCTION_TABLE 구조체에 대한 포인터가 포함됩니다. SIO_GET_MULTIPLE_EXTENSION_FUNCTION_POINTER IOCTL은 Ws2def.h 헤더 파일에 정의되어 있습니다. WSAID_MULTIPLE_RIO GUID는 Mswsock.h 헤더 파일에 정의되어 있습니다.

 

Windows Phone 8: 이 함수는 Windows Phone 8 이상에서 Windows Phone 스토어 앱에서 지원됩니다.

Windows 8.1Windows Server 2012 R2: 이 함수는 Windows 8.1, Windows Server 2012 R2 이상에서 Windows 스토어 앱에서 지원됩니다.

스레드 보안

여러 스레드가 RIODequeueCompletion 함수를 사용하여 동일한 RIO_CQ 액세스하려는 경우 중요한 섹션, 슬림 판독기 작성기 잠금 또는 유사한 상호 제외 메커니즘을 통해 액세스를 조정해야 합니다. 완료 큐가 공유되지 않으면 상호 제외가 필요하지 않습니다.

요구 사항

요구 사항
헤더 mswsock.h