LPFN_RIORESIZECOMPLETIONQUEUE 콜백 함수(mswsock.h)
RIOResizeCompletionQueue 함수는 Winsock 등록 I/O 확장에 사용하기 위해 I/O 완료 큐의 크기를 더 크거나 작게 조정합니다.
구문
LPFN_RIORESIZECOMPLETIONQUEUE LpfnRioresizecompletionqueue;
BOOL LpfnRioresizecompletionqueue(
RIO_CQ CQ,
DWORD QueueSize
)
{...}
매개 변수
CQ
크기를 조정할 기존 I/O 완료 큐를 식별하는 설명자입니다.
QueueSize
반환 값
오류가 발생하지 않으면 RIOResizeCompletionQueue 함수는 TRUE를 반환합니다. 그렇지 않으면 FALSE 값이 반환되고 WSAGetLastError 함수를 호출하여 특정 오류 코드를 검색할 수 있습니다.
반환 코드 | 설명 |
---|---|
시스템이 호출에서 포인터 인수를 사용하려는 시도에서 잘못된 포인터 주소를 발견했습니다. 이 오류는 CQ 매개 변수에 지정된 완료 큐에 잘못된 포인터가 포함된 경우 반환됩니다. |
|
잘못된 매개 변수가 함수에 전달되었습니다. CQ 매개 변수가 잘못되면 이 오류가 반환됩니다(예: RIO_INVALID_CQ). QueueSize 매개 변수에 지정된 큐의 크기가 RIO_CQ_MAX_SIZE보다 큰 경우에도 이 오류가 반환됩니다. |
|
충분한 메모리를 할당할 수 없습니다. QueueSize 매개 변수에 지정된 큐에 메모리를 할당할 수 없는 경우 이 오류가 반환됩니다. |
|
I/O 완료 큐를 참조하는 작업이 너무 많습니다. 이 I/O 완료 큐의 크기를 더 작게 조정할 수 없습니다. |
RIOResizeCompletionQueue 함수는 I/O 완료 큐의 크기를 더 크거나 작게 조정합니다. I/O 완료 큐에 이미 완료가 포함된 경우 해당 완료가 새 완료 큐로 복사됩니다.
I/O 완료 큐에는 완료 큐와 연결된 요청 큐 수와 요청 큐의 송신 및 수신 수에 따라 달라지는 필수 최소 크기가 있습니다. 애플리케이션이 RIOResizeCompletionQueue 함수를 호출하고 I/O 완료 큐의 기존 완료 수에 대해 큐를 너무 작게 설정하려고 하면 호출이 실패하고 큐 크기가 조정되지 않습니다.
참고
지정된 SIO_GET_MULTIPLE_EXTENSION_FUNCTION_POINTER opcode를 사용하여 WSAIoctl 함수를 호출하여 런타임에 RIOResizeCompletionQueue 함수에 대한 함수 포인터를 가져와야 합니다. 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.1 및 Windows Server 2012 R2: 이 함수는 Windows 8.1, Windows Server 2012 R2 이상에서 Windows 스토어 앱에서 지원됩니다.
스레드 보안
여러 스레드가 RIODequeueCompletion 또는 RIOResizeCompletionQueue 함수를 사용하여 동일한 RIO_CQ 액세스하려는 경우 중요한 섹션, 슬림 판독기 작성기 잠금 또는 유사한 상호 제외 메커니즘을 통해 액세스를 조정해야 합니다. 완료 큐가 공유되지 않으면 상호 제외가 필요하지 않습니다.
요구 사항
요구 사항 | 값 |
---|---|
헤더 | mswsock.h |