PFN_WSK_CLOSE_SOCKET コールバック関数 (wsk.h)
WskCloseSocket 関数はソケットを閉じ、関連付けられているリソースをすべて解放します。
構文
PFN_WSK_CLOSE_SOCKET PfnWskCloseSocket;
NTSTATUS PfnWskCloseSocket(
[in] PWSK_SOCKET Socket,
[in, out] PIRP Irp
)
{...}
パラメーター
[in] Socket
閉じているソケットのソケット オブジェクトを指定する WSK_SOCKET 構造体へのポインター。
[in, out] Irp
WSK サブシステムが非同期的に閉じる操作を完了するために使用する呼び出し元によって割り当てられた IRP へのポインター。 WSK 関数で IRP を使用する方法の詳細については、「 Winsock カーネル関数での IRP の使用」を参照してください。
戻り値
WskCloseSocket は、次のいずれかの NTSTATUS コードを返します。
リターン コード | 説明 |
---|---|
|
ソケットが正常に閉じられました。 IRP は成功状態で完了します。 |
|
WSK サブシステムはソケットを直ちに閉じませんでした。 WSK サブシステムは、ソケットを閉じた後に IRP を完了します。 閉じる操作の状態は、IRP の IoStatus.Status フィールドに返されます。 |
|
エラーが発生しました。 IRP は失敗状態で完了します。 |
注釈
WskCloseSocket 関数を呼び出す前に、WSK アプリケーションは、アプリケーションの他のスレッドで、拡張関数を含むソケットの関数に対して進行中の他の関数呼び出しがないことを確認する必要があります。 たとえば、アプリケーションが別のスレッドの同じソケットで WskSend を呼び出している間、WSK アプリケーションは 1 つのスレッドのソケットで WskCloseSocket を呼び出してはなりません。 ソケットの関数に対する進行中の呼び出しは、 WskCloseSocket を呼び出してソケットを閉じる前に、WSK アプリケーションに制御を戻す必要があります。 ただし、WSK アプリケーションは、まだ完了していないソケットの関数に対する以前の呼び出しから保留中の IRP がある場合は、 WskCloseSocket を呼び出すことができます。
WskCloseSocket 関数を呼び出すと、WSK サブシステムは、ソケットの関数の以前の呼び出しから保留中のすべての IRP を取り消して完了します。 また、WSK サブシステムは、進行中のイベント コールバック関数が、ソケットを閉じる前に制御を WSK サブシステムに返すようにします。
WSK アプリケーションが WskCloseSocket を呼び出した後、ソケットの関数に対してそれ以上の呼び出しを行ってはなりません。
WSK アプリケーションがソケットにセキュリティ記述子を適用する場合、WskSocket、WskSocketConnect、または WskControlSocket の呼び出しで指定されたセキュリティ記述子のキャッシュされたコピーは、ソケットが閉じられたときに解放されません。 WSK アプリケーションは、セキュリティ記述子が不要になったときに 、WSK_RELEASE_SD クライアント制御操作を使用して、セキュリティ記述子のキャッシュされたコピーを解放する必要があります。
WSK サブシステムは、ソケットの作成時に WSK サブシステムによって割り当てられたソケットのソケット オブジェクト (WSK_SOCKET) のメモリの割り当てを解除します。
接続指向ソケットの場合、ソケットが既に双方向に完全に切断されていない限り、 WskCloseSocket 関数は常にソケットの中止切断を実行します。 接続指向ソケットをリモート トランスポート アドレスから正常に切断するには、WSK アプリケーションで WskDisconnect 関数を呼び出す必要があります。
要件
要件 | 値 |
---|---|
サポートされている最小のクライアント | Windows Vista 以降のバージョンの Windows オペレーティング システムで使用できます。 |
対象プラットフォーム | ユニバーサル |
Header | wsk.h (Wsk.h を含む) |
IRQL | <= DISPATCH_LEVEL |