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 |
Level |
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 ソケット オプションのサブセットのみがサポートされます。 サポート対象のオプションの一覧は次のとおりです。
- IP_TTL
- IP_UNICAST_IF
- IPV6_UNICAST_HOPS
- IPV6_UNICAST_IF
- IPV6_V6ONLY
- SO_CONDITIONAL_ACCEPT
- SO_EXCLUSIVEADDRUSE
- SO_PORT_SCALABILITY
- SO_RCVBUF
- SO_REUSEADDR
- TCP_BSDURGENT
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 |