다음을 통해 공유


LPFN_RIOREGISTERBUFFER 콜백 함수(mswsock.h)

RIORegisterBuffer 함수는 등록된 버퍼 설명자인 RIO_BUFFERID Winsock 등록 I/O 확장에 사용할 지정된 버퍼를 등록합니다.

구문

LPFN_RIOREGISTERBUFFER LpfnRioregisterbuffer;

RIO_BUFFERID LpfnRioregisterbuffer(
  PCHAR DataBuffer,
  DWORD DataLength
)
{...}

매개 변수

DataBuffer

등록할 메모리 버퍼의 시작 부분에 대한 포인터입니다.

DataLength

등록할 버퍼의 길이(바이트)입니다.

반환 값

오류가 발생하지 않으면 RIORegisterBuffer 함수는 등록된 버퍼 설명자를 반환합니다. 그렇지 않으면 RIO_INVALID_BUFFERID 값이 반환되고 WSAGetLastError 함수를 호출하여 특정 오류 코드를 검색할 수 있습니다.

반환 코드 설명
WSAEFAULT
시스템이 호출에서 포인터 인수를 사용하려는 시도에서 잘못된 포인터 주소를 발견했습니다. DataBuffer 매개 변수에 잘못된 버퍼 포인터가 전달되면 이 오류가 반환됩니다.
WSAEINVAL
잘못된 매개 변수가 함수에 전달되었습니다.
DataLength 매개 변수가 0이면 이 오류가 반환됩니다.

설명

RIORegisterBuffer 함수는 지정된 버퍼에 대해 등록된 버퍼 식별자를 만듭니다. 버퍼가 등록되면 버퍼가 포함된 가상 메모리 페이지가 실제 메모리에 잠깁니다.

인접하지 않은 몇 개의 작은 버퍼가 등록된 경우 버퍼의 실제 메모리 공간은 등록당 전체 메모리 페이지만큼 효과적으로 클 수 있습니다. 이러한 경우 여러 요청 버퍼를 함께 할당하는 것이 도움이 될 수 있습니다.

또한 버퍼 등록 자체에 사용되는 실제 메모리에는 약간의 오버헤드가 있습니다. 따라서 단일 더 큰 할당으로 집계된 할당이 많은 경우 버퍼 등록을 집계하여 실제 메모리 공간을 더 줄일 수 있습니다. 이 경우 애플리케이션은 버퍼가 결국 등록 취소되도록 주의를 기울여야 하지만 송신 또는 수신 요청이 처리되지 않는 동안에는 주의해야 할 수 있습니다.

등록된 버퍼의 일부는 데이터를 보내거나 받기 위해 pData 매개 변수의 RIOSend, RIOSendEx, RIOReceive 및 RIOReceiveEx 함수에 전달됩니다.

버퍼 식별자가 더 이상 필요하지 않은 경우 RIODeregisterBuffer 함수를 호출하여 버퍼 식별자를 등록 취소합니다.

참고

RIORegisterBuffer 함수에 대한 함수 포인터는 지정된 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 스토어 앱에서 지원됩니다.

요구 사항

요구 사항
헤더 mswsock.h