共用方式為


封鎖 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 檔。