次の方法で共有


PFN_WSK_DISCONNECT コールバック関数 (wsk.h)

WskDisconnect 関数は、接続指向またはストリーム ソケットをリモート トランスポート アドレスから切断します。

構文

PFN_WSK_DISCONNECT PfnWskDisconnect;

NTSTATUS PfnWskDisconnect(
  [in]           PWSK_SOCKET Socket,
  [in, optional] PWSK_BUF Buffer,
  [in]           ULONG Flags,
  [in, out]      PIRP Irp
)
{...}

パラメーター

[in] Socket

切断されているソケットのソケット オブジェクトを指定する WSK_SOCKET 構造体へのポインター。

[in, optional] Buffer

WSK_BUF構造体へのポインター。 この構造体は、ソケットが切断される前に WSK サブシステムによってリモート トランスポート アドレスに送信されるデータを含むデータ バッファーを記述します。 送信するデータがない場合、WSK アプリケーションはこのポインターを NULL に設定します。 flags パラメーター WSK_FLAG_ABORTIVE指定した場合、Buffer パラメーターは NULL である必要があります。

[in] Flags

次のフラグ (0) を含む ULONG 値。

WSK_FLAG_ABORTIVE

ソケットの中止切断を実行するように WSK サブシステムに指示します。 WSK アプリケーションでこのフラグが指定されていない場合、WSK サブシステムはソケットの正常な切断を実行します。

[in, out] Irp

WSK サブシステムが非同期的に切断操作を完了するために使用する呼び出し元によって割り当てられた IRP へのポインター。 WSK 関数での IRP の使用の詳細については、「 Winsock カーネル関数での IRP の使用」を参照してください。

戻り値

WskDisconnect は 、次のいずれかの NTSTATUS コードを返します。

リターン コード 説明
STATUS_SUCCESS
ソケットがリモート トランスポート アドレスから正常に切断されました。 IRP は成功状態で完了します。
STATUS_PENDING
WSK サブシステムはソケットを直ちに切断できませんでした。 WSK サブシステムは、リモート トランスポート アドレスからソケットを切断した後、IRP を完了します。 切断操作の状態は、IRP の IoStatus.Status フィールドに返されます。
STATUS_FILE_FORCED_CLOSED
ソケットは機能しなくなりました。 IRP は失敗状態で完了します。 WSK アプリケーションは、できるだけ早くソケットを閉じる には、WskCloseSocket 関数を呼び出す必要があります。
その他の状態コード
エラーが発生しました。 IRP は失敗状態で完了します。

注釈

WSK アプリケーションは、以前にリモート トランスポート アドレスに接続した接続指向またはストリーム ソケット、またはリッスンしているソケットで受け入れたソケットでのみ、 WskDisconnect 関数を呼び出すことができます。

WskDisconnect により、WSK サブシステムは、基になるトランスポートに適した手段を介して、接続が切断されていることをリモート トランスポート アドレスに通知します。 Buffer パラメーターが NULL 以外の場合、WSK サブシステムは、ソケットを切断する前に、バッファー内のデータをリモート トランスポート アドレスに送信します。

正常な切断が実行された場合、WSK サブシステムは、未処理のすべての送信データが送信されるまで待機してから、ソケットを切断します。 ソケットが切断されると、WSK アプリケーションはリモート トランスポート アドレスに追加のデータを送信できません。 ただし、WSK アプリケーションは、リモート アプリケーションがソケットの末尾を切断するまで、リモート トランスポート アドレスから追加のデータを受信できます。

すべてのトランスポートがハーフオープン接続をサポートしているわけではないことに注意してください。 トランスポートがハーフオープン接続をサポートしていない場合、WSK アプリケーションは、正常な切断が実行された後、リモート トランスポート アドレスから追加のデータを受信しません。

正常な切断では、IRP は、トランスポート プロトコルによって切断操作が完全に完了した場合にのみ完了します。 一部のトランスポート プロトコルでは、リモート トランスポート アドレスへのデータの送信に問題がある場合、IRP が完了しないことがあります。 この状況では、WSK アプリケーションは、 WskDisconnect 関数をもう一度呼び出し、WSK_FLAG_ABORTIVE フラグを指定するか 、WskCloseSocket 関数を呼び出すことによって回復できます。 いずれの場合も、WSK サブシステムはソケットを中止し、保留中の IRP を強制的に完了します。

中止切断が実行された場合、WSK サブシステムは進行中および保留中のすべての送信操作を取り消し、ソケットの切断を待機しません。 切断を中止した後、WSK アプリケーションは、追加のデータをリモート トランスポート アドレスに送信したり、リモート トランスポート アドレスから追加のデータを受信したりすることはできません。

WSK アプリケーションは、 WskCloseSocket 関数を呼び出すことによって、接続を完全に閉じることができます。

要件

要件
サポートされている最小のクライアント Windows Vista 以降のバージョンの Windows オペレーティング システムで使用できます。
対象プラットフォーム ユニバーサル
Header wsk.h (Wsk.h を含む)
IRQL <= DISPATCH_LEVEL

こちらもご覧ください

WSK_BUF

WSK_PROVIDER_CONNECTION_DISPATCH

WSK_PROVIDER_STREAM_DISPATCH

WSK_SOCKET

WskCloseSocket

WskConnect

WskDisconnectEvent

WskSocketConnect