次の方法で共有


SIO_LOOPBACK_FAST_PATH コントロール コード

重要なSIO_LOOPBACK_FAST_PATH は非推奨であり、コードで使用することはお勧めしません。

SIO_LOOPBACK_FAST_PATH ソケット I/O 制御コードを使用すると、WSK アプリケーションで TCP ソケットを構成して、ループバック インターフェイスでの操作を高速化できます。

この IOCTL を使用するために、WSK アプリケーションは、次のパラメーターを使用して WskControlSocket 関数を呼び出します。

パラメーター 価値

RequestType

WskIoctl する

ControlCode

SIO_LOOPBACK_FAST_PATH

レベルの

0

InputSize

入力バッファーのサイズ (バイト単位)。

InputBuffer

入力バッファーへのポインター。 このパラメーターには、ソケットを高速ループバック操作用に構成する必要があるかどうかを示す ブール 値へのポインターが含まれています。

OutputSize

0

OutputBuffer

NULL

OutputSizeReturned

NULL

Irp

IRP へのポインター。

アプリケーションは、SIO_LOOPBACK_FAST_PATH IOCTL を使用して、TCP ソケットでのループバック操作のパフォーマンスを向上させることができます。 この IOCTL は、TCP/IP スタックがこのソケットでのループバック操作に特別な高速パスを使用することを要求します。 SIO_LOOPBACK_FAST_PATH IOCTL は TCP ソケットでのみ使用できます。 この IOCTL は、ループバック セッションの両側で使用する必要があります。 TCP ループバック の高速パスは、IPv4 または IPv6 ループバック インターフェイスを使用してサポートされます。

接続要求を開始する予定のソケットは、接続要求を行う前に、この IOCTL を適用する必要があります。 接続要求をリッスンしているソケットは、接続を受け入れる前に、この IOCTL を適用する必要があります。

アプリケーションが高速パスを使用してループバック インターフェイスで接続を確立したら、接続の有効期間中のすべてのパケットで高速パスを使用する必要があります。

非ループバック パスに接続されるソケットに SIO_LOOPBACK_FAST_PATH を適用しても効果はありません。

この TCP ループバック最適化により、ネットワーク層を介した従来のループバックではなく、トランスポート層 (TL) を通過するパケットが発生します。 この最適化により、ループバック パケットの待機時間が短縮されます。 アプリケーションがループバック 高速パスを使用するように接続レベル設定をオプトインすると、すべてのパケットがループバック パスに従います。 ループバック通信の場合、輻輳とパケットドロップは想定されません。 TCP での輻輳制御と信頼性の高い配信の概念は不要です。 ただし、これはフロー制御には当てはまりません。 フロー制御がないと、送信側は受信バッファーを過剰に処理し、TCP ループバック動作の誤りを引き起こす可能性があります。 TCP 最適化ループバック パスのフロー制御は、キューに送信要求を配置することによって維持されます。 受信バッファーがいっぱいになると、TCP/IP スタックは、キューが処理されるまで送信が完了しないことを保証し、フロー制御を維持します。

接続データの Windows フィルタリング プラットフォーム (WFP) 吹き出しが存在する TCP 高速パス ループバック接続は、ループバックの最適化されていない低速パスを使用する必要があります。 そのため、WFP フィルターを使用すると、この新しいループバック高速パスが使用されなくなります。 WFP フィルターが有効になっている場合、SIO_LOOPBACK_FAST_PATH IOCTL が設定されている場合でも、システムは低速パスを使用します。 これにより、ユーザー モード アプリケーションには完全な WFP セキュリティ機能が備わります。

既定では、SIO_LOOPBACK_FAST_PATH は無効になっています。

SIO_LOOPBACK_FAST_PATH IOCTL を使用してソケットのループバック 高速パスを有効にする場合は、TCP/IP ソケット オプションのサブセットのみがサポートされます。 サポートされているオプションの一覧には、次のものが含まれます。

WSK アプリケーションは、この種類の要求に対して wskControlSocket関数呼び出すときに、IRP へのポインターと完了ルーチンを指定する必要があります。 アプリケーションは、WSK サブシステムが IRP を完了するまでバッファーを解放しないでください。 IRP が完了すると、サブシステムは完了ルーチンを呼び出します。 完了ルーチンでは、アプリケーションは IRP の状態を確認し、以前に要求に割り当てられていたすべてのリソースを解放する必要があります。

WSK IRP の処理の詳細については、「Winsock カーネル関数での Irp の使用を参照してください。

IRP を完了すると、サブシステムは Irp->IoStatus.Status 要求が成功した場合に STATUS_SUCCESS に設定されます。 それ以外の場合、Irp->IoStatus.Status は、呼び出しが成功しなかった場合は STATUS_INVALID_BUFFER_SIZE または STATUS_NOT_SUPPORTED に設定されます。

戻り値

必要条件

サポートされる最小クライアント

Windows 8

サポートされている最小サーバー

Windows Server 2012

ヘッダ

Mstcpip.h

IRQL

PASSIVE_LEVEL

関連項目

SIO_LOOPBACK_FAST_PATH (SDK)

Winsock カーネル関数で IRP を使用する