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。 使用 IPv4 或 IPv6 环回接口支持 TCP 环回快速路径。

计划启动连接请求的套接字必须在发出连接请求之前应用此 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 套接字选项的子集。 支持的选项列表包括:

为此类请求调用 WskControlSocket 函数时,WSK 应用程序必须指定指向 IRP 的指针和完成例程。 在 WSK 子系统完成 IRP 之前,应用程序不得释放缓冲区。 完成 IRP 后,子系统将调用完成例程。 在完成例程中,应用程序必须检查 IRP 状态,并释放之前为请求分配的所有资源。

有关 WSK IRP 处理的详细信息,请参阅 将 IRP 与 Winsock 内核函数配合使用

完成 IRP 时,如果请求成功,子系统会将 Irp-IoStatus.Status> 设置为 STATUS_SUCCESS。 否则,如果调用不成功,Irp-IoStatus.Status> 将设置为STATUS_INVALID_BUFFER_SIZESTATUS_NOT_SUPPORTED

返回值

要求

最低受支持的客户端

Windows 8

最低受支持的服务器

Windows Server 2012

标头

Mstcpip.h

IRQL

PASSIVE_LEVEL

另请参阅

SIO_LOOPBACK_FAST_PATH (SDK)

将 IRP 与 Winsock 内核函数配合使用