次の方法で共有


SAN ソケットを閉じる

接続の両側の Windows ソケット スイッチが SAN サービス プロバイダーの WSPCloseSocket 関数を呼び出した後、SAN サービス プロバイダーは次の手順を実行して SAN ソケットを閉じます。

  1. 接続の両側の各 SAN サービス プロバイダーは、接続を切断し、要求の受信を完了します。WSPRecv 関数の呼び出しは、lpErrno パラメーターで適切なエラー コードを返します。 たとえば、SAN サービス プロバイダーは WSAECONNRE Standard Edition T を返して、リモート ピアが接続をリセットすることを示します。

    また、各 SAN サービス プロバイダーは、閉じる SAN ソケットの保留中の重複操作の完了を通知します。 SAN サービス プロバイダーは、重複する操作の完了を通知するために WPUCompleteOverlappedRequest 関数を呼び出します。 この呼び出しでは、SAN サービス プロバイダーは、重複する操作に関連付けられている WSAOVERLAPPED 構造へのポインターを渡します。 また、SAN サービス プロバイダーは、WSA_OPERATION_ABORTED エラー コードを渡して、SAN ソケットが閉じられたために重複した操作が取り消されたことを指定します。 重複する操作の完了を通知する前に、SAN サービス プロバイダーは、操作に必要なメモリを解放する必要があります。

  2. SAN サービス プロバイダーが、WPU でプレフィックスが付いた関数への呼び出し、つまりアップコールを WPUCreateSocketHandle アップコールで取得した SAN ソケットへのハンドルを使用するスイッチへ行った後、SAN サービス プロバイダーは、WPUCloseSocketHandle 関数を呼び出して、スイッチへの最終的なアップコールを行い、ソケット ハンドルを閉じる必要があります。 その後、SAN サービス プロバイダーは、SAN ソケットに関連するすべてのものをクリーンします。 アップコールは、スイッチのアップコール ディスパッチ テーブルからの関数呼び出しです。 スイッチは、SAN サービス プロバイダーの WSPStartupEx 関数を呼び出してプロバイダーの使用を開始するときに、このアップコール ディスパッチ テーブルへのポインターを提供します。

SAN サービス プロバイダーが SAN ソケットを閉じる前の手順を実行している限り、スイッチはそれ以外のすべてを処理します。

SAN サービス プロバイダーとスイッチ開始ソケット クロージャの間の競合状態を防ぐために、SAN サービス プロバイダーは、スイッチが WSPCloseSocket を呼び出すまで、SAN ソケットに関連するデータ構造を解放しないでください。