封鎖 SAN 的呼叫
Windows Sockets 交換器會處理封鎖呼叫,以及在內部取消這類呼叫,或將它們轉送到 TCP/IP 服務提供者。 參數永遠不會呼叫 SAN 服務提供者的 WSPCancelBlockingCall 函式 ,以取消進行中的封鎖要求。 因此,實作 WSPCancelBlockingCall 函式不需要 SAN 服務提供者。
參數會以下列方式處理下列封鎖要求和對應的取消:
當應用程式要求將 SAN 通訊端連線到封鎖模式中的特定目的地位址時,交換器會收到封鎖 的 WSPConnect 呼叫。 交換器會將非封鎖模式中的連線要求轉送到適當的 SAN 服務提供者 WSPConnect 函式。 如果參數必須基於某些原因取消此連線要求,它會呼叫 SAN 服務提供者的 WSPCloseSocket 函式。 SAN 服務提供者必須立即中止連線要求,並釋放通訊端的資源。
當交換器收到應用程式起始的封鎖要求,以在 SAN 通訊端上執行資料傳輸作業時,它會以重迭的 (非封鎖) 方式轉送資料傳輸要求給適當的 SAN 服務提供者。 例如,如果交換器收到同步 (封鎖) WSPSend 呼叫,它會以重迭 (非) 封鎖方式呼叫適當的 SAN 服務提供者 WSPSend 函式。 如果應用程式稍後取消資料傳輸作業,且交換器可以控制應用程式的緩衝區,交換器就會完成具有失敗狀態的應用程式要求。 如果應用程式緩衝區涉及未完成的 RDMA 作業,交換器會等候作業完成。 如果 RDMA 傳輸需要太長的時間才能完成,交換器會呼叫適當的 SAN 服務提供者 WSPCloseSocket 函式,以中止的方式關閉連線,藉此強制完成。
注意 如果應用程式取消封鎖呼叫,它就無法依賴所保留的連線。 在取消封鎖要求之後,保證只有 WSPCloseSocket 呼叫在通訊端上成功。 如需詳細資訊,請參閱 Microsoft Windows SDK 中的 Windows Sockets SPI 檔。