IPPROTO_TCP 套接字选项

下表介绍了IPPROTO_TCP套接字选项,这些选项适用于为 IPv4 和 IPv6 地址系列创建的套接字, (AF_INET 和AF_INET6) 将协议参数指定为 TCP (IPPROTO_TCP) 。 有关获取和设置套接字选项的详细信息,请参阅 getsockoptsetsockopt 函数参考页。

若要枚举协议并发现每个已安装协议支持的属性,请使用 WSAEnumProtocolsWSCEnumProtocolsWSCEnumProtocols32 函数。

选项

选项 获取 设置 Optval 类型 说明
TCP_BSDURGENT DWORD (布尔) 如果 为 TRUE,则服务提供商实现 Berkeley Software Distribution (BSD) 样式, (用于处理加速数据的默认) 。 此选项与 TCP_EXPEDITED_1122 选项相反。 此选项只能在连接上设置一次。 设置此选项后,无法关闭此选项。 服务提供商不需要实现此选项。 默认情况下, (设置为 TRUE) 启用此选项。
TCP_EXPEDITED_1122 DWORD (布尔) 如果 为 TRUE,则服务提供商实现 RFC-1222 中指定的加速数据。 否则,将使用 Berkeley Software Distribution (BSD) 样式 (默认) 。 此选项只能在连接上设置一次。 设置此选项后,无法关闭此选项。 服务提供商不需要实现此选项。
TCP_FAIL_CONNECT_ON_ICMP_ERROR DWORD (布尔) 如果 为 TRUE,则收到值为 WSAEHOSTUNREACH 的 ICMP 错误时,将返回连接 API 调用。 然后,将通过“TCP_ICMP_ERROR_INFO套接字”选项获取错误的源地址。 如果 为 FALSE,则套接字的行为正常。 默认值为禁用, (设置为 FALSE) 。 对于类型安全性,应使用 WSAGetFailConnectOnIcmpErrorWSASetFailConnectOnIcmpError 函数,而不是直接使用套接字选项。
TCP_ICMP_ERROR_INFO ICMP_ERROR_INFO 检索 TCP 套接字在连接调用失败期间收到的 ICMP 错误的信息。 仅在以前启用了 TCP_FAIL_CONNECT_ON_ICMP_ERROR 且 连接 已返回 WSAEHOSTUNREACH 的 TCP 套接字上有效。 查询是非阻塞的。 如果查询成功且返回的 optlen 值为 0,则自上次连接调用以来未收到任何 ICMP 错误。 如果收到 ICMP 错误,则其信息将可用,直到再次调用 连接 。 信息作为 ICMP_ERROR_INFO 结构返回。 对于类型安全,应使用 WSAGetIcmpErrorInfo 函数,而不是直接使用套接字选项。
TCP_KEEPCNT DWORD 获取或设置在连接终止前将发送的 TCP 保持活动探测数。 将TCP_KEEPCNT设置为大于 255 的值是非法的。
TCP_MAXRT DWORD 如果此值为非负值,则表示所需的连接超时(以秒为单位)。 如果为 -1,则表示请求禁用连接超时 (即连接将永久重新传输) 。 如果禁用连接超时,则每次重新传输的重新传输超时都会呈指数级增长,最大值为 60 秒,然后保留该超时。
TCP_NODELAY DWORD (布尔) 启用或禁用 TCP 套接字的 Nagle 算法。 默认情况下,此选项 (设置为 FALSE) 禁用。
TCP_TIMESTAMPS DWORD (布尔) 启用或禁用 RFC 1323 时间戳。 请注意,时间戳的全局配置 (默认值为关闭) , (set/get) -nettcpsetting 中的“时间戳”。 设置此套接字选项将覆盖该全局配置设置。
TCP_FASTOPEN DWORD (布尔) 启用或禁用 RFC 7413 TCP 快速打开,这使你可以在打开连接的三向握手阶段开始发送数据。 请注意,若要利用快速打开,应使用 ConnectEx 进行初始连接,并在该函数的 lpSendBuffer 参数中指定要在握手过程中传输的数据。 lpSendBuffer 中的某些数据将根据快速打开协议传输。
TCP_KEEPIDLE DWORD 获取或设置 TCP 连接在将保留探测发送到远程之前保持空闲状态的秒数。

注意:
此选项从 Windows 10 版本 1709 开始可用。


TCP_KEEPINTVL DWORD 获取或设置 TCP 连接在发送另一个 keepalive 探测之前等待保持响应的秒数。

注意:
此选项从 Windows 10 版本 1709 开始可用。


Windows 对IPPROTO_TCP选项的支持

选项 Windows 10 Windows 7 Windows Server 2008 Windows Vista
TCP_BSDURGENT x x x x
TCP_EXPEDITED_1122 x x x x
TCP_KEEPCNT 从 Windows 10 版本 1703 开始
TCP_MAXRT x x x x
TCP_NODELAY x x x x
TCP_TIMESTAMPS x x x x
TCP_FASTOPEN 从 Windows 10 版本 1607 开始

  选项 Windows Server 2003 Windows XP Windows 2000 Windows NT4 Windows 9x/Me
TCP_BSDURGENT x x x x
TCP_EXPEDITED_1122 x x x
TCP_KEEPCNT
TCP_MAXRT
TCP_NODELAY x x x x
TCP_TIMESTAMPS
TCP_FASTOPEN

注解

在针对 Windows Vista 及更高版本发布的 Microsoft Windows 软件开发工具包 (SDK) 中,头文件的组织方式已更改,IPPROTO_TCP级别在 Winsock2.h 头文件中自动包含在 Ws2def.h 头文件中定义。 IPPROTO_TCP套接字选项(TCP_BSDURGENT除外)在 Ws2ipdef.h 头文件中定义,该文件自动包含在 Ws2tcpip.h 头文件中。 由于历史原因 ,TCP_BSDURGENT 选项在 Mswsock.h 头文件中定义。 不应直接使用 Ws2def.hWs2ipdef.h 头文件。

要求

要求
标头
Ws2def.h (包括 Winsock2.h) ;
Windows Server 2003、Windows XP 和 Windows 2000 上的 Winsock2.h