IPPROTO_TCP 套接字选项

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

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

选项

选项 Get 设置 Optval 类型 说明
TCP_BSDURGENT DWORD (布尔值) 如果 为 TRUE,服务提供商将实现 Berkeley Software Distribution (BSD) 样式(默认)来处理加速数据。 此选项是TCP_EXPEDITED_1122选项的反函数。 此选项只能在连接上设置一次。 设置此选项后,无法关闭此选项。 不需要由服务提供商实现此选项。 默认情况下,此选项处于启用状态(设置为 TRUE)。
TCP_EXPEDITED_1122 DWORD (布尔值) 如果 为 TRUE,则服务提供商实现 RFC-1222 中指定的加速数据。 否则,将使用伯克利软件分发(BSD)样式(默认)。 此选项只能在连接上设置一次。 设置此选项后,无法关闭此选项。 不需要由服务提供商实现此选项。
TCP_FAIL_CONNECT_ON_ICMP_ERROR DWORD (布尔值) 如果 为 TRUE,则当收到具有值 WSAEHOSTUNREACH 的 ICMP 错误时,连接 API 调用将返回。 然后,该错误的源地址将通过TCP_ICMP_ERROR_INFO套接字选项提供。 如果 为 FALSE,则套接字的行为正常。 默认值已禁用(设置为 FALSE)。 对于类型安全性,应使用 WSAGetFailConnectOnIcmpError 和 WSASetFailConnectOnIcmpError 函数,而不是直接使用套接字选项。
TCP_ICMP_ERROR_INFO ICMP_ERROR_INFO 检索 TCP 套接字在连接调用失败期间收到的 ICMP 错误的信息。 仅在以前启用TCP_FAIL_CONNECT_ON_ICMP_ERROR的 TCP 套接字上有效,并且 连接 已返回 WSAEHOSTUNREACH。 查询是非阻塞的。 如果成功查询且返回的 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 时间戳。 请注意,时间戳(默认值为 off)、(set/get)-nettcpsetting 中的“Timestamps”也有全局配置。 设置此套接字选项将替代全局配置设置。
TCP_FASTOPEN DWORD (布尔值) 启用或禁用 RFC 7413 TCP 快速打开,这使你可以在打开连接的三向握手阶段开始发送数据。 请注意,若要使用快速打开,应使用 ConnectEx 进行初始连接,并在该函数的 lpSendBuffer 参数中指定要在握手过程中传输的数据。 lpSendBuffer 中的某些数据将在快速开放协议下传输。
TCP_KEEPIDLE DWORD 获取或设置 TCP 连接在发送到远程之前保持空闲状态的秒数。

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


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

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


IPPROTO_TCP选项的 Windows 支持

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

  选项 Windows Server 2003 Windows XP Windows 2000 Windows NT4 Windows 9x/Me
TCP_BSDURGENT
TCP_EXPEDITED_1122
TCP_KEEPCNT
TCP_MAXRT
TCP_NODELAY
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