共用方式為


完成資料傳輸請求

Windows Sockets 交換器會以異步方式在 SAN 套接字上傳輸數據。 每當交換機呼叫 SAN 服務提供者的 WSPSendWSPRecvWSPRdmaWriteWSPRdmaRead 資料傳輸函式時,它會指定指向重疊結構(WSAOVERLAPPED)的指標,並將完成例程設為 NULL。 即使切換呼叫 SAN 服務提供者的 WSPEventSelect 函數以指示套接字處於非阻塞模式,SAN 服務提供者也不需要為這些資料傳輸功能實作非阻塞語義。

如 Windows Sockets API 和 SPI 文件中 Microsoft Windows SDK 文件所述,無論是阻塞還是非阻塞套接字都會以相同方式處理重疊操作。 也就是說,SAN 服務提供者會啟動特定的數據傳輸作業,然後立即將控制權傳回給交換機。 這些數據傳輸函式會傳回錯誤碼WSA_IO_PENDING,指出異步作已啟動,且該作業會在稍後完成。 作業完成之後,如果交換器需要完成通知,SAN 服務提供者會發出完成訊號,如下列段落所述。

因為交換機總是為重疊數據傳輸操作的完成例程指定 NULL,因此不需要 SAN 服務提供者支援透過異步過程呼叫(APCs)來完成。

如果可能的話,交換機會嘗試呼叫 SAN 服務提供者的 WSPGetOverlappedResult 函式,以檢查數據傳輸要求的完成情況。 如此一來,交換器就可以避免與活躍的重疊完成機制相關聯的額外負擔。 若要向 SAN 服務提供者指出,交換器不需要特定重疊資料傳輸作業的完成通知,交換器會將 WSAOVERLAPPED 結構中 hEvent 成員的低序位設定為1。 SAN 服務提供者不得以這種方式通知交換器提交的要求完成。

如果交換機需要通知重疊數據傳輸操作的完成,它會將 WSAOVERLAPPED 結構中 hEvent 成員的低位設為零。 SAN 服務提供者必須呼叫 WPUCompleteOverlappedRequest 函式,以通知以這種方式起始的數據傳輸作業已完成。 在此呼叫中,SAN 服務提供者會將指標傳遞給對應至已完成數據傳輸作業的 WSAOVERLAPPED 結構。 在此 WPUCompleteOverlappedRequest 呼叫中,SAN 服務提供者也會將從交換器的呼叫中取得的套接字描述元傳遞至 WPUCreateSocketHandle 函式。 交換器接收完成通知,將其與應用程式的 I/O 要求進行匹配,並根據要求適時地完成這些 I/O 要求。