다음을 통해 공유


데이터 전송 요청 완료

Windows 소켓 스위치는 SAN 소켓의 데이터를 비동기적으로 전송합니다. 스위치가 SAN 서비스 공급자의 WSPSend, WSPRecv, WSPRdmaWrite또는 WSPRdmaRead 데이터 전송 함수를 호출할 때마다 겹치는 구조체(WSAOVERLAPPED)에 대한 포인터를 지정하고, 완료 루틴에 대해서는 NULL 을(를) 지정합니다. 스위치가 SAN 서비스 공급자의 WSPEventSelect 함수를 호출하여 소켓이 차단 해제 모드임을 나타내는 경우에도 SAN 서비스 공급자는 이러한 데이터 전송 함수에 대한 비 차단 의미 체계를 구현할 필요가 없습니다.

microsoft Windows SDK 설명서 Windows 소켓 API 및 SPI 설명서에 설명된 대로 차단 및 비블로킹 소켓은 겹치는 작업을 동일하게 처리합니다. 즉, SAN 서비스 공급자는 특정 데이터 전송 작업을 시작한 다음 즉시 제어를 스위치로 반환합니다. 이러한 데이터 전송 함수는 WSA_IO_PENDING 오류 코드를 반환하여 비동기 작업이 시작되었고 나중에 해당 작업이 완료되었음을 나타냅니다. 작업이 완료되면 다음 단락에 설명된 대로 스위치에 완료 알림이 필요한 경우 SAN 서비스 공급자가 완료를 알립니다.

스위치는 겹치는 데이터 전송 작업의 완료 루틴에 대해 항상 NULL 지정하므로 SAN 서비스 공급자는 APC(비동기 프로시저 호출)를 사용하여 완료를 지원할 필요가 없습니다.

가능하면 스위치는 SAN 서비스 공급자의 WSPGetOverlappedResult 함수를 호출하여 데이터 전송 요청 완료를 폴링하려고 시도합니다. 이러한 방식으로 스위치는 겹치는 활성 완성 메커니즘과 관련된 오버헤드를 방지할 수 있습니다. SAN 서비스 공급자에게 스위치가 겹치는 특정 데이터 전송 작업에 대한 완료 알림이 필요하지 않음을 나타내기 위해 스위치는 WSAOVERLAPPED 구조에 있는 hEvent 멤버의 하위 비트를 1로 설정합니다. SAN 서비스 공급자는 이러한 방식으로 제출된 요청의 완료를 스위치에 알려서는 안 됩니다.

스위치에서 겹치는 데이터 전송 작업의 완료에 대한 알림이 필요한 경우 WSAOVERLAPPED 구조에서 hEvent 멤버의 하위 비트를 0으로 설정합니다. SAN 서비스 공급자는 이렇게 시작된 데이터 전송 작업을 완료하기 위해 WPUCompleteOverlappedRequest 함수를 호출해야 합니다. 이 호출에서 SAN 서비스 공급자는 완료된 데이터 전송 작업에 해당하는 WSAOVERLAPPED 구조체에 대한 포인터를 전달합니다. 이 WPUCompleteOverlappedRequest 호출에서 SAN 서비스 공급자는 WPUCreateSocketHandle 함수에 대한 호출에서 스위치에서 얻은 소켓 설명자를 전달합니다. 스위치는 완료 알림을 수신하고, 애플리케이션의 I/O 요청과 일치시키고, 애플리케이션에 대해 해당 I/O 요청을 적절하게 완료합니다.