IPPROTO_TCP 套接字选项
下表介绍了IPPROTO_TCP套接字选项,这些选项适用于为 IPv4 和 IPv6 地址系列创建的套接字, (AF_INET 和AF_INET6) 将协议参数指定为 TCP (IPPROTO_TCP) 。 有关获取和设置套接字选项的详细信息,请参阅 getsockopt 和 setsockopt 函数参考页。
若要枚举协议并发现每个已安装协议支持的属性,请使用 WSAEnumProtocols、 WSCEnumProtocols 或 WSCEnumProtocols32 函数。
选项
选项 | 获取 | 设置 | 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) 。 对于类型安全性,应使用 WSAGetFailConnectOnIcmpError 和 WSASetFailConnectOnIcmpError 函数,而不是直接使用套接字选项。 |
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 连接在将保留探测发送到远程之前保持空闲状态的秒数。
注意: |
TCP_KEEPINTVL | 是 | 是 | DWORD | 获取或设置 TCP 连接在发送另一个 keepalive 探测之前等待保持响应的秒数。
注意: |
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.h 和 Ws2ipdef.h 头文件。
要求
要求 | 值 |
---|---|
标头 |
|