本部分介绍适用于各种版本的 Windows作系统的 Winsock Socket 输入/输出控件(IOCTLs)。 使用 WSAIoctl 或 WSPIoctl 函数发出 Winsock IOCTL 来控制套接字、传输协议或通信子系统的模式。
一些 Winsock IOCTL 需要比此表可以传达更多的说明;此类选项包含指向其他主题的链接。
可以采用一种编码方案来保留当前定义的 ioctlsocket 作码,同时提供一种方便的方式来将作码标识符空间分区到与 dwIoControlCode 参数一样多的 32 位实体中。 dwIoControlCode 参数旨在允许在添加新的控制代码时允许协议和供应商独立,同时保留与 Windows Sockets 1.1 和 Unix 控制代码的向后兼容性。 dwIoControlCode 参数具有以下格式。
我 | O | V | T | 供应商/地址系列 | 代码 |
---|---|---|---|---|---|
3 | 3 | 2 | 2 2 | 2 2 2 2 2 2 2 1 1 1 1 | 1 1 1 1 1 1 |
1 | 0 | 9 | 8 7 | 6 5 4 3 2 1 0 9 8 7 6 | 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 |
注释
表中显示的 dwIoControlCode 参数中的位必须按列从上到下垂直读取。 因此,最左侧位是位 31,下一位是位 30,最右侧位是位 0。
如果输入缓冲区对代码有效,则设置为 IOC_IN。
如果输出缓冲区对代码有效,则设置 O,就像 IOC_OUT一样。 使用输入和输出缓冲区的控制代码同时设置 I 和 O。
如果代码没有参数,则设置 V,就像 IOC_VOID一样。
T 是一个 2 位数量,用于定义 IOCTL 的类型。 定义了以下值:
0 IOCTL 是标准的 Unix IOCTL 代码,与 FIONREAD 和 FIONBIO 一样。
1 IOCTL 是通用 Windows 套接字 2 IOCTL 代码。 为 Windows 套接字 2 定义的新 IOCTL 代码将具有 T == 1。
2 IOCTL 仅适用于特定地址系列。
3 IOCTL 仅适用于特定供应商的提供商,与 IOC_VENDOR一样。 此类型允许为公司分配供应商编号,该编号显示在 供应商/地址系列 参数中。 然后,供应商可以定义特定于该供应商的新 IOCTL,而无需向清算所注册 IOCTL,从而提供供应商的灵活性和隐私。
供应商/地址系列 一个 11 位数量,用于定义拥有代码(如果 T == 3)或包含代码应用到的地址系列的供应商(如果 T == 2)。 如果这是 Unix IOCTL 代码(T == 0),则此参数的值与 Unix 上的代码相同。 如果这是通用 Windows 套接字 2 IOCTL (T == 1),则可以将此参数用作代码参数的扩展,以提供其他代码值。
法典 包含作的特定 IOCTL 代码的 16 位数量。
Unix IOCTL 代码
支持以下 Unix IOCTL 代码(命令)。
FIONBIO
在 套接字上启用或禁用非阻止模式。 lpvInBuffer 参数指向无符号长 (QoS),如果启用非阻塞模式,则为非零;如果禁用非阻塞模式,则为零。 创建套接字时,它会在阻塞模式下运行(即禁用非阻塞模式)。 这与 BSD 套接字一致。
WSAAsyncSelect 或 WSAEventSelect 例程会自动将套接字设置为非阻塞模式。 如果套接字上已发出 WSAAsyncSelect 或 WSAEventSelect ,则任何使用 WSAIoctl 将套接字设置为阻止模式的尝试都将失败,WSAEINVAL。 若要将套接字设置回阻止模式,应用程序必须先通过调用 lEvent 参数等于零的 WSAAsyncSelect 来禁用 WSAAsyncSelect,或者通过调用 lNetworkEvents 参数等于零的 WSAEventSelect 来禁用 WSAEventSelect。
FIONREAD
确定 可从套接字以原子方式读取的数据量。 lpvOutBuffer 参数指向 WSAIoctl 存储结果的无符号长处。
如果传入 s 参数的套接字面向流(例如类型SOCK_STREAM), FIONREAD 将返回可在单个接收作中读取的数据总量;这通常与套接字上排队的数据总量相同(因为数据流面向字节,因此不能保证)。
如果传入 s 参数的套接字面向消息(例如类型SOCK_DGRAM), FIONREAD 将返回报告可供读取的字节总数,而不是套接字上排队的第一个数据报(message)的大小。
SIOCATMARK
确定是否已读取所有 OOB 数据。 这仅适用于已配置为内联接收任何 OOB 数据(SO_OOBINLINE)的流样式套接字(例如类型SOCK_STREAM)。 如果未等待读取 OOB 数据,则作返回 TRUE。 否则,它将返回 FALSE,并且对套接字执行的下一个接收作将检索标记前面的部分或所有数据;应用程序应使用 SIOCATMARK 作来确定是否存在任何保留。 如果在紧急(带外)数据之前有任何正常数据,则会按顺序接收数据。 (请注意, recv 作永远不会在同一调用中混合 OOB 和普通数据。 lpvOutBuffer 指向 WSAIoctl 在其中存储结果的 BOOL。
Windows 套接字 2 命令
支持以下 Windows 套接字 2 命令。
SIO_ACQUIRE_PORT_RESERVATION (作码设置: I, T==3)
请求 TCP 或 UDP 端口块的运行时预留。 对于运行时端口预留,端口池要求从授予预留的套接字的进程中使用预留。 运行时端口预留仅持续到调用 SIO_ACQUIRE_PORT_RESERVATION IOCTL 的套接字的生存期。 相比之下,使用 CreatePersistentTcpPortReservation 或 CreatePersistentUdpPortReservation 函数创建的永久性端口预留可由任何能够获取永久性预留的进程使用。
有关详细信息,请参阅 SIO_ACQUIRE_PORT_RESERVATION 参考。
Windows Vista 和更高版本的作系统支持SIO_ACQUIRE_PORT_RESERVATION。
SIO_ADDRESS_LIST_CHANGE (作码设置: V, T==1)
接收应用程序可绑定到的套接字协议系列本地传输地址列表中更改的通知。 完成此 IOCTL 后,不会提供输出信息;完成仅指示可用本地地址列表已更改,应再次通过 SIO_ADDRESS_LIST_QUERY查询。
假设应用程序使用重叠 I/O 通过完成 SIO_ADDRESS_LIST_CHANGE 请求通知更改(尽管不需要)。 或者,如果在非阻塞套接字上发出 SIO_ADDRESS_LIST_CHANGE IOCTL 且没有重叠参数(lpOverlapped/ lpCompletionRoutine 设置为 NULL),它将立即完成并出现错误 WSAEWOULDBLOCK。 然后,应用程序可以通过调用 WSAEventSelect 或 WSAAsyncSelect 等待地址列表更改事件,并在网络事件位掩码中设置FD_ADDRESS_LIST_CHANGE位。
SIO_ADDRESS_LIST_QUERY (作码设置: O, T==1)
获取应用程序可绑定到的套接字协议系列的本地传输地址列表。 地址列表因地址系列而异,某些地址从列表中排除。
注释
在 Windows 即插即用环境中,可以动态添加和删除地址。 因此,应用程序不能依赖 SIO_ADDRESS_LIST_QUERY 返回的信息是永久性的。 应用程序可以通过 SIO_ADDRESS_LIST_CHANGE IOCTL 注册地址更改通知,该 IOCTL 通过重叠 I/O 或FD_ADDRESS_LIST_CHANGE事件提供通知。 以下作序列可用于保证应用程序始终具有当前地址列表信息:
- IOCTL SIO_ADDRESS_LIST_CHANGE 问题
- 问题 SIO_ADDRESS_LIST_QUERY IOCTL
- 每当 SIO_ADDRESS_LIST_CHANGE IOCTL 通知地址列表更改(通过重叠 I/O 或通过发出FD_ADDRESS_LIST_CHANGE事件信号)时,应重复整个作序列。
有关详细信息,请参阅 SIO_ADDRESS_LIST_QUERY 参考。 Windows 2000 及更高版本支持SIO_ADDRESS_LIST_QUERY。
SIO_APPLY_TRANSPORT_SETTING (作码设置: I, T==3)
将传输设置应用于套接字。 应用的传输设置基于在 lpvInBuffer 参数中传递的TRANSPORT_SETTING_ID。
当前唯一定义的传输设置是 TCP 套接字上的 REAL_TIME_NOTIFICATION_CAPABILITY 功能。
如果传递 的TRANSPORT_SETTING_ID 已将 Guid 成员设置为 REAL_TIME_NOTIFICATION_CAPABILITY,则这是一个请求,要求应用 与 ControlChannelTrigger 一起使用的 TCP 套接字的实时通知设置,以便在 Windows 应用商店应用中接收后台网络通知。
有关详细信息,请参阅 SIO_APPLY_TRANSPORT_SETTING 参考。 Windows 8、Windows Server 2012 及更高版本支持SIO_APPLY_TRANSPORT_SETTING。
SIO_ASSOCIATE_HANDLE (作码设置: I, T==1)
将此套接字与配套接口的指定句柄相关联。 输入缓冲区包含对应于配套接口(例如,TH_NETDEV和TH_TAPI.)的清单常量对应的整数值,后跟指定配套接口的句柄的值以及任何其他必需的信息。 有关特定于特定配套界面的详细信息,请参阅 Winsock 附件 中的相应部分。 总大小反映在输入缓冲区长度中。 不需要输出缓冲区。 对于不支持此 IOCTL 的服务提供商,指示 WSAENOPROTOOPT 错误代码。 可以使用 SIO_TRANSLATE_HANDLE检索此 IOCTL 关联的句柄。
例如,如果特定提供程序提供了大量关于套接字行为的附加控件,并且(2)控件特定于提供程序,因此它们不会映射到现有的 Windows 套接字函数或将来可能定义的控件,可以使用配套接口。 建议使用组件对象模型(COM),而不是使用此 IOCTL 来发现和跟踪套接字可能支持的其他接口。 此 IOCTL 与 COM 不可用或不能用于其他原因的系统兼容(反向)。
SIO_ASSOCIATE_PORT_RESERVATION (作码设置: I, T==3)
将套接字与端口预留令牌标识的 TCP 或 UDP 端口块的持久性或运行时预留相关联。 必须在绑定套接字之前颁发 SIO_ASSOCIATE_PORT_RESERVATION IOCTL。 如果套接字已绑定,则会从给定令牌标识的端口预留中选择分配给该套接字的端口。 如果指定预留中没有可用的端口, 绑定 函数调用将失败。
有关详细信息,请参阅 SIO_ASSOCIATE_PORT_RESERVATION 参考。
Windows Vista 和更高版本的作系统支持SIO_ASSOCIATE_PORT_RESERVATION。
SIO_BASE_HANDLE (作码设置: O, T==1)
检索给定套接字的基本服务提供程序句柄。 返回的值是 SOCKET。
分层服务提供商永远不会截获此 IOCTL,因为返回值必须是基服务提供商的套接字句柄。
如果输出缓冲区不足以容纳套接字句柄( cbOutBuffer 小于 SOCKET 的大小),或者 lpvOutBuffer 参数为 NULL 指针, 则返回SOCKET_ERROR 作为此 IOCTL 的结果, WSAGetLastError 返回 WSAEFAULT。
SIO_BASE_HANDLE 在 Mswsock.h 头文件中定义,并在 Windows Vista 及更高版本上受支持。
SIO_BSP_HANDLE (作码设置: O, T==1)
检索 WSASendMsg 函数使用的套接字的基本服务提供程序句柄。 返回的值是 SOCKET。
分层服务提供商使用此 Ioctl 来确保提供程序截获 WSASendMsg 函数。
如果输出缓冲区不足以容纳套接字句柄( cbOutBuffer 小于 SOCKET 的大小),或者 lpvOutBuffer 参数为 NULL 指针, 则返回SOCKET_ERROR 作为此 IOCTL 的结果, WSAGetLastError 返回 WSAEFAULT。
SIO_BSP_HANDLE 在 Mswsock.h 头文件中定义,并在 Windows Vista 及更高版本上受支持。
SIO_BSP_HANDLE_SELECT (作码设置: O, T==1)
检索 select 函数使用的套接字的基本服务提供程序句柄。 返回的值是 SOCKET。
分层服务提供商使用此 Ioctl 来确保提供程序截获 选择 函数。
如果输出缓冲区不足以容纳套接字句柄( cbOutBuffer 小于 SOCKET 的大小),或者 lpvOutBuffer 参数为 NULL 指针, 则返回SOCKET_ERROR 作为此 IOCTL 的结果, WSAGetLastError 返回 WSAEFAULT。
SIO_BSP_HANDLE_SELECT 在 Mswsock.h 头文件中定义,并在 Windows Vista 及更高版本上受支持。
SIO_BSP_HANDLE_POLL(作码设置:O、T==1)
检索 WSAPoll 函数使用的套接字的基本服务提供程序句柄。 lpOverlapped 参数必须是 NULL 指针。 返回的值是 SOCKET。
分层服务提供商使用此 Ioctl 来确保提供程序截获 WSAPoll 函数。
如果输出缓冲区不足以容纳套接字句柄( cbOutBuffer 小于 SOCKET 的大小), 则 lpvOutBuffer 参数为 NULL 指针,或者 lpOverlapped 参数不是 NULL 指针, SOCKET_ERROR 返回此 IOCTL 的结果, WSAGetLastError 返回 WSAEFAULT。
SIO_BSP_HANDLE_POLL 在 Mswsock.h 头文件中定义,并在 Windows Vista 及更高版本上受支持。
SIO_CHK_QOS(作码设置:I、O、T==3)
检索有关 QoS 流量特征的信息。 在流设置与接收 RESV 消息之间的发送系统的过渡阶段(请参阅 RSVP 服务如何调用 TC 以获取过渡阶段的详细信息),与 RSVP 流关联的流量根据服务类型(BEST EFFORT、 CONTROLLED LOAD 或 GUARANTEED)进行调整。 有关详细信息,请参阅平台 SDK 的“服务质量”部分中的“使用SIO_CHK_QOS”。
SIO_CPU_AFFINITY (作码设置: I, T==3)
启用端口共享和接收指示并行化。 当应用程序使用此套接字选项将套接字关联到不同的处理器,然后将套接字绑定到同一地址时,接收指示将基于接收方缩放(RSS)哈希分布在套接字上。 RSS 设置不会更改,因此始终在同一处理器上指示任何给定流(本地终结点、远程终结点对)。 因此,属于给定流的所有数据包都将指示到同一套接字。 必须在绑定之前调用此 IOCTL,否则将返回 WSAEINVAL。 输入缓冲区是 USHORT 类型的处理器索引(基于 0)。 IOCTL 与SO_REUSEADDR和SO_REUSE_MULTICASTPORT不兼容。 仅支持 UDP 套接字。
注释
如果面向 Windows SDK 版本 10.0.19041.0(Windows 10 版本 2004),请使用值 0x98000015
而不是 名称SIO_CPU_AFFINITY。
SIO_ENABLE_CIRCULAR_QUEUEING (作码设置: V, T==1)
向基础消息导向服务提供商指示,由于缓冲区队列溢出,不应删除新到达的消息。 相反,应消除队列中最早的消息,以适应新到达的消息。 不需要输入和输出缓冲区。 请注意,此 IOCTL 仅适用于与不可靠、面向消息的协议关联的套接字。 对于不支持此 IOCTL 的服务提供商,指示 WSAENOPROTOOPT 错误代码。
SIO_FIND_ROUTE (作码设置: O, T==1)
发出时,此 IOCTL 请求发现路由到输入缓冲区中指定为 sockaddr 的远程地址。 如果地址已存在于本地缓存中,则其条目将失效。 对于 Novell 的 IPX,此调用会启动 IPX GetLocalTarget (GLT),该 IPX 会查询网络以获取给定的远程地址。
SIO_FLUSH (作码设置: V, T==1)
放弃与此套接字关联的发送队列的当前内容。 不需要输入和输出缓冲区。 对于不支持此 IOCTL 的服务提供商,指示 WSAENOPROTOOPT 错误代码。
SIO_GET_BROADCAST_ADDRESS(作码设置:O、T==1)
此 IOCTL 使用 sockaddr 结构填充输出缓冲区,该结构包含适合用于 sendto/ WSASendTo 的广播地址。 IPv6 套接字不支持此 IOCTL,并返回 WSAENOPROTOOPT 错误代码。
SIO_GET_EXTENSION_FUNCTION_POINTER(作码设置:O、I、T==1)
检索指向关联服务提供商支持的指定扩展函数的指针。 输入缓冲区包含全局唯一标识符(GUID),其值标识有问题的扩展函数。 指向所需函数的指针在输出缓冲区中返回。 扩展函数标识符由服务提供商供应商建立,应包含在介绍扩展函数功能和语义的供应商文档中。
Windows TCP/IP 服务提供商支持的扩展函数的 GUID 值在 Mswsock.h 头文件中定义。 这些 GUID 的可能值如下所示:
术语 | DESCRIPTION |
---|---|
WSAID_ACCEPTEX |
AcceptEx 扩展函数。 |
WSAID_CONNECTEX |
ConnectEx 扩展函数。 |
WSAID_DISCONNECTEX |
DisconnectEx 扩展函数。 |
WSAID_GETACCEPTEXSOCKADDRS |
GetAcceptExSockaddrs 扩展函数。 |
WSAID_TRANSMITFILE |
TransmitFile 扩展函数。 |
WSAID_TRANSMITPACKETS |
TransmitPackets 扩展函数。 |
WSAID_WSARECVMSG |
LPFN_WSARECVMSG (WSARecvMsg) 扩展函数。 |
WSAID_WSASENDMSG |
WSASendMsg 扩展函数。 |
SIO_GET_GROUP_QOS(作码设置:O、I、T==1)
保留以供将来与套接字一起使用。
检索与此套接字所属的套接字组关联的 QOS 结构。 输入缓冲区是可选的。 某些协议(例如 RSVP)允许使用输入缓冲区来限定服务质量请求。 QOS 结构将复制到输出缓冲区中。 如果此套接字不属于适当的套接字组,则返回 QOS 结构的 SendFlowspec 和 ReceivingFlowspec 成员设置为 NULL。 对于不支持服务质量的服务提供商,指示 WSAENOPROTOOPT 错误代码。
SIO_GET_INTERFACE_LIST (作码设置: O, T==0)
以 INTERFACE_INFO 结构数组的形式返回配置的 IP 接口及其参数的列表。
注释
Windows 套接字 2 兼容的 TCP/IP 服务提供商必须支持此命令。
lpvOutBuffer 参数指向缓冲区,该缓冲区将有关接口的信息存储为接口上的单播 IP 地址的INTERFACE_INFO结构数组。 cbOutBuffer 参数指定输出缓冲区的长度。 返回的接口数( lpvOutBuffer 参数指向的缓冲区中返回的结构数)可以基于 lhttpBytesReturned 参数中返回的输出缓冲区的实际长度来确定。
如果使用 SIO_GET_INTERFACE_LIST 调用 WSAIoctl 函数,并且套接字参数的级别成员未定义为IPPROTO_IP,则返回 WSAEINVAL。 如果指定输出缓冲区长度的 cbOutBuffer 参数接收已配置的接口列表,则对具有 SIO_GET_INTERFACE_LIST 的 WSAIoctl 函数的调用将返回 WSAEFAULT。
SP4 及更高版本在 Windows Me/98 和 Windows NT 4.0 上支持SIO_GET_INTERFACE_LIST。
SIO_GET_INTERFACE_LIST_EX (作码设置: O, T==0)
保留以供将来与套接字一起使用。
以 INTERFACE_INFO_EX 结构数组的形式返回已配置的 IP 接口及其参数的列表。
lpvOutBuffer 参数指向缓冲区,用于将有关接口的信息存储为接口上的单播 IP 地址的INTERFACE_INFO_EX结构数组。 cbOutBuffer 参数指定输出缓冲区的长度。 返回的接口数( lpvOutBuffer 中返回的结构数)可以根据 lhttpBytesReturned 参数中返回的输出缓冲区的实际长度来确定。
Windows 目前不支持SIO_GET_INTERFACE_LIST_EX。
SIO_GET_QOS (作码设置: O, T==1)
保留以供将来与套接字一起使用。 检索与套接字关联的 QOS 结构。 输入缓冲区是可选的。 某些协议(例如 RSVP)允许使用输入缓冲区来限定服务质量请求。 QOS 结构将复制到输出缓冲区中。 输出缓冲区的大小必须足够大,才能包含完整的 QOS 结构。 对于不支持服务质量的服务提供商,指示 WSAENOPROTOOPT 错误代码。
在套接字连接之前,发送方可能无法调用 SIO_GET_QOS 。
接收方可以在绑定 后 立即调用SIO_GET_QOS。
SIO_GET_TX_TIMESTAMP
用于获取传输 (TX) 数据包的时间戳的套接字 IOCTL。 仅适用于数据报套接字。
SIO_GET_TX_TIMESTAMP控制代码从套接字的传输时间戳队列中删除传输时间戳。 首先使用 SIO_TIMESTAMPING 套接字 IOCTL 启用时间戳接收。 然后,使用以下参数调用 WSAIoctl (或 WSPIoctl)函数,按 ID 检索 tx 时间戳。
对于 SIO_GET_TX_TIMESTAMP,输入为 UINT32 时间戳 ID,输出为 UINT64 时间戳值。 成功后,tx 时间戳可用,并返回。 如果没有可用的传输时间戳, 则 WSAGetLastError 返回 WSAEWOULDBLOCK。
注释
通过 UDP_SEND_MSG_SIZE合并发送时,不支持 TX 时间戳。
另请参阅 Winsock 时间戳。
SIO_IDEAL_SEND_BACKLOG_CHANGE (作码设置: V, T==0)
当理想的发送积压工作 (ISB) 值更改基础连接时,通知应用程序。
使用 Windows 套接字通过 TCP 连接发送数据时,请务必在 TCP 中保留足够多的数据未完成(已发送但尚未确认),以实现最高的吞吐量。 为达到 TCP 连接的最佳吞吐量而未完成的数据量的理想值称为理想的发送积压工作(ISB)大小。 ISB 值是 TCP 连接的带宽延迟积和接收方的播发接收窗口(部分是网络拥塞量)的函数。
每个连接的 ISB 值可从 Windows Server 2008、Windows Vista SP1 和更高版本的作系统中的 TCP 协议实现获取。 当 ISB 值动态更改连接时,应用程序可以使用 SIO_IDEAL_SEND_BACKLOG_CHANGE IOCTL 来获取通知。
有关详细信息,请参阅 SIO_IDEAL_SEND_BACKLOG_CHANGE 参考。
Windows Server 2008、Windows Vista SP1 和更高版本的作系统支持SIO_IDEAL_SEND_BACKLOG_CHANGE。
SIO_IDEAL_SEND_BACKLOG_QUERY (作码设置: O, T==0)
检索基础连接的理想发送积压工作 (ISB) 值。
使用 Windows 套接字通过 TCP 连接发送数据时,请务必在 TCP 中保留足够多的数据未完成(已发送但尚未确认),以实现最高的吞吐量。 为达到 TCP 连接的最佳吞吐量而未完成的数据量的理想值称为理想的发送积压工作(ISB)大小。 ISB 值是 TCP 连接的带宽延迟积和接收方的播发接收窗口(部分是网络拥塞量)的函数。
每个连接的 ISB 值可从 Windows Server 2008 及更高版本中的 TCP 协议实现获取。 应用程序可以使用 SIO_IDEAL_SEND_BACKLOG_QUERY IOCTL 查询 ISB 值以获取连接。
有关详细信息,请参阅 SIO_IDEAL_SEND_BACKLOG_QUERY 参考。
Windows Server 2008、Windows Vista SP1 和更高版本的作系统支持SIO_IDEAL_SEND_BACKLOG_QUERY。
SIO_KEEPALIVE_VALS (作码设置: I, T==3)
启用或禁用 TCP 保持连接 选项的按连接设置,该选项指定 TCP 保持连接超时和间隔。 有关保持活动选项的详细信息,请参阅 IETF 网站中 RFC 1122 中指定的通信层的要求的第 4.2.3.6 节。 (此资源可能仅以英语提供。
SIO_KEEPALIVE_VALS 可用于启用或禁用保持活动探测,并设置保持连接超时和间隔。 保持连接超时指定在发送第一个保持活动数据包之前没有活动的超时(以毫秒为单位)。 保持连接间隔指定在未收到确认的情况下发送连续保持连接数据包之间的间隔(以毫秒为单位)。
SO_KEEPALIVE选项(即SOL_SOCKET套接字选项之一)还可用于启用或禁用连接上的 TCP 保持活动状态,以及查询此选项的当前状态。 若要查询是否在套接字上启用 TCP 保持活动,可以使用 SO_KEEPALIVE 选项调用 getsockopt 函数。 若要启用或禁用 TCP 保持活动状态,可以使用 SO_KEEPALIVE 选项调用 setsockopt 函数。 如果使用 SO_KEEPALIVE启用 TCP 保持活动状态,则默认 TCP 设置将用于保持连接超时和间隔,除非这些值已使用 SIO_KEEPALIVE_VALS更改。
有关详细信息,请参阅 SIO_KEEPALIVE_VALS 参考。 Windows 2000 及更高版本支持SIO_KEEPALIVE_VALS。
SIO_LOOPBACK_FAST_PATH (作码设置: I, T==3)
配置 TCP 套接字,以降低延迟,加快环回接口上的作速度。 此 IOCTL 请求 TCP/IP 堆栈使用此套接字上的环回作的特殊快速路径。 SIO_LOOPBACK_FAST_PATH IOCTL 只能与 TCP 套接字一起使用。 此 IOCTL 必须在环回会话的两端使用。 使用 IPv4 或 IPv6 环回接口支持 TCP 环回快速路径。 默认情况下,SIO_LOOPBACK_FAST_PATH 处于禁用状态。
有关详细信息,请参阅 SIO_LOOPBACK_FAST_PATH 参考。 Windows 8、Windows Server 2012 及更高版本支持SIO_LOOPBACK_FAST_PATH。
SIO_MULTIPOINT_LOOPBACK(作码设置:V、T==1)
控制多播会话中应用程序(不一定由同一套接字)发送的数据是否由联接到环回接口上的多播目标组的套接字接收。 TRUE 值导致本地计算机上的应用程序发送的多播数据将传送到环回接口上的侦听套接字。 FALSE 值可防止本地计算机上的应用程序发送的多播数据传递到环回接口上的侦听套接字。 默认情况下 ,SIO_MULTIPOINT_LOOPBACK 处于启用状态。
SIO_MULTICAST_SCOPE (作码设置: I, T==1)
指定多播传输的发生范围。 范围定义为要覆盖的路由网段数。 范围为零表示多播传输不会放置在网络上,但可以在本地主机内的套接字之间传播。 范围值一(默认值)表示传输将放置在网络上,但不会跨越任何路由器。 更高的范围值决定了可交叉的路由器数。 请注意,这对应于 IP 多播中的生存时间 (TTL) 参数。 默认情况下,范围为 1。
SIO_QUERY_RSS_PROCESSOR_INFO(作码设置:O、T==1)
查询套接字与 RSS 处理器核心与 NUMA 节点之间的关联。
SIO_QUERY_RSS_PROCESSOR_INFO IOCTL 返回包含PROCESSOR_NUMBER和 NUMA 节点 ID 的SOCKET_PROCESSOR_AFFINITY结构。 返回 的PROCESSOR_NUMBER 结构包含组内的组号和相对处理器编号。
有关详细信息,请参阅 SIO_QUERY_RSS_PROCESSOR_INFO 参考。 Windows 8、Windows Server 2012 及更高版本支持SIO_QUERY_RSS_PROCESSOR_INFO。
SIO_QUERY_RSS_SCALABILITY_INFO (作码设置: O, T==3)
查询卸载用于接收端缩放(RSS)功能的接口。 为SIO_QUERY_RSS_SCALABILITY_INFO返回的参数结构是在 Mstcpip.h 头文件中定义的RSS_SCALABILITY_INFO结构中指定的。 此结构的定义如下:
// Scalability info for the transport
typedef struct _RSS_SCALABILITY_INFO {
BOOLEAN RssEnabled;
} RSS_SCALABILITY_INFO, *PRSS_SCALABILITY_INFO;
RssEnabled 成员中返回的值指示是否在至少一个接口上启用了 RSS。
如果输出缓冲区不足以用于 RSS_SCALABILITY_INFO 结构( cbOutBuffer 小于 RSS_SCALABILITY_INFO的大小),或者 lpvOutBuffer 参数为 NULL 指针, 则返回SOCKET_ERROR 作为此 IOCTL 的结果, WSAGetLastError 返回 WSAEINVAL。
在多个 CPU 驻留在单个系统中的高速网络中,由于 NDIS 5.1 和早期版本的体系结构将接收协议处理限制为单个 CPU,因此会抑制网络协议堆栈在多 CPU 系统上很好地缩放的能力。 接收方缩放(RSS)通过允许从网络适配器进行网络负载在多个 CPU 之间均衡来解决此问题。
Windows Vista 及更高版本支持SIO_QUERY_RSS_SCALABILITY_INFO。
SIO_QUERY_TRANSPORT_SETTING (作码设置: I, T==3)
查询套接字上的传输设置。 要查询的传输设置基于在 lpvInBuffer 参数中传递的TRANSPORT_SETTING_ID。
当前唯一定义的传输设置是 TCP 套接字上的 REAL_TIME_NOTIFICATION_CAPABILITY 功能。
如果 TRANSPORT_SETTING_ID 已将 Guid 成员设置为 REAL_TIME_NOTIFICATION_CAPABILITY,则这是一个请求,用于查询 与 ControlChannelTrigger 一起使用的 TCP 套接字的实时通知设置,以在 Windows 应用商店应用中接收后台网络通知。 如果 WSAIoctl 或 WSPIoctl 调用成功,此 IOCTL 将返回具有当前状态 的REAL_TIME_NOTIFICATION_SETTING_OUTPUT 结构。
有关详细信息,请参阅 SIO_QUERY_TRANSPORT_SETTING 参考。 Windows 8、Windows Server 2012 及更高版本支持SIO_QUERY_TRANSPORT_SETTING。
SIO_QUERY_WFP_ALE_ENDPOINT_HANDLE (作码设置: O, T==3)
查询应用程序层强制(ALE)终结点句柄。
Windows 筛选平台(WFP)支持网络流量检查和修改。 在 Windows Vista 上,WFP 侧重于主机是通信终结点的方案。 但是,在 Windows Server 2008 上,有一些边缘防火墙实现希望利用 WFP 平台来检查和代理直通流量。 Internet 安全和加速(ISA)服务器是此类边缘设备的一个示例。
某些防火墙方案可能需要将入站数据包注入到与现有终结点关联的发送路径中。 需要有一种机制来发现与目标终结点关联的传输层终结点句柄。 创建终结点的应用程序拥有这些传输层终结点。 此 IOCTL 用于为传输层终结点句柄映射提供套接字句柄。
如果输出缓冲区不足以容纳终结点句柄( cbOutBuffer 小于 UINT64 的大小),或者 lpvOutBuffer 参数为 NULL 指针, 则返回SOCKET_ERROR 作为此 IOCTL 的结果, WSAGetLastError 返回 WSAEINVAL。
Windows Vista 及更高版本支持SIO_QUERY_WFP_ALE_ENDPOINT_HANDLE。
SIO_QUERY_WFP_CONNECTION_REDIRECT_CONTEXT (作码设置: I, T==3)
查询 Windows 筛选平台(WFP)重定向服务使用的重定向记录的重定向上下文。
SIO_QUERY_WFP_CONNECTION_REDIRECT_CONTEXT IOCTL 用于在重定向套接字连接上提供代理连接跟踪。 此 WFP 功能有助于跟踪从连接到最终连接到目标的初始重定向的重定向记录。
有关详细信息,请参阅 SIO_QUERY_WFP_CONNECTION_REDIRECT_CONTEXT 参考。 Windows 8、Windows Server 2012 及更高版本支持SIO_QUERY_WFP_CONNECTION_REDIRECT_CONTEXT。
SIO_QUERY_WFP_CONNECTION_REDIRECT_RECORDS (作码设置: I, T==3)
查询接受的 TCP/IP 连接的重定向记录,以供 Windows 筛选平台 (WFP) 重定向服务使用。
SIO_QUERY_WFP_CONNECTION_REDIRECT_RECORDS IOCTL 用于在重定向套接字连接上提供代理连接跟踪。 此 WFP 功能有助于跟踪从连接到最终连接到目标的初始重定向的重定向记录。
有关详细信息,请参阅 SIO_QUERY_WFP_CONNECTION_REDIRECT_RECORDS 参考。 Windows 8、Windows Server 2012 及更高版本支持SIO_QUERY_WFP_CONNECTION_REDIRECT_RECORDS。
SIO_RCVALL (作码设置: I, T==3)
允许套接字接收通过网络接口传递的所有 IPv4 或 IPv6 数据包。 传递给 WSAIoctl 函数的套接字句柄必须是下列项之一:
- 使用地址系列设置为AF_INET创建的 IPv4 套接字,套接字类型设置为SOCK_RAW,并将协议设置为IPPROTO_IP。
- 使用地址系列设置为AF_INET6创建的 IPv6 套接字,套接字类型设置为SOCK_RAW,协议设置为IPPROTO_IPV6。
套接字还必须绑定到显式本地 IPv4 或 IPv6 接口,这意味着不能绑定到 INADDR_ANY 或 in6addr_any。
在 Windows Server 2008 及更早版本中, SIO_RCVALL IOCTL 设置不会捕获从网络接口发送的本地数据包。 这包括在另一个接口上收到的数据包,并转发了为 SIO_RCVALL IOCTL 指定的网络接口。
在 Windows 7 和 Windows Server 2008 R2 上,已更改此项,以便也会捕获从网络接口发送的本地数据包。 这包括在另一个接口上接收的数据包,然后将绑定到具有 SIO_RCVALL IOCTL 的套接字的网络接口转发。
设置此 IOCTL 需要本地计算机上的管理员权限。
此功能有时称为杂交模式。
SIO_RCVALL IOCTL 选项的可能值在 Mstcpip.h 头文件中定义的RCVALL_VALUE枚举中指定。 SIO_RCVALL的可能值如下所示:
术语 | DESCRIPTION |
---|---|
RCVALL_OFF |
禁用此选项,以便套接字不会接收网络上的所有 IPv4 或 IPv6 数据包。 |
RCVALL_ON |
启用此选项,以便套接字接收网络上的所有 IPv4 或 IPv6 数据包。 如果 NIC 支持杂交模式,则此选项在网络接口卡 (NIC)上启用杂交模式。 在具有网络中心的 LAN 段上,支持杂交模式的 NIC 将捕获 LAN 上的所有 IPv4 或 IPv6 流量,包括同一 LAN 段上其他计算机之间的流量。 所有捕获的数据包(IPv4 或 IPv6,具体取决于套接字)都将传送到原始套接字。 此选项不会捕获接口上的其他数据包(例如 ARP、IPX 和 NetBEUI 数据包)。 Netmon 对网络接口使用相同的模式,但不使用此选项来捕获流量。 |
RCVALL_SOCKETLEVELONLY |
此功能当前未实现,因此设置此选项没有任何影响。 |
RCVALL_IPLEVEL |
启用此选项,以便 IPv4 或 IPv6 套接字在网络上的 IP 级别接收所有数据包。 此选项不会在网络接口卡上启用杂交模式。 此选项仅影响 IP 级别的数据包处理。 NIC 仍仅接收定向到其配置的单播和多播地址的数据包。 但是,启用此选项的套接字不仅接收定向到特定 IP 地址的数据包,还会接收 NIC 接收的所有 IPv4 或 IPv6 数据包。 此选项不会捕获接口上收到的其他数据包(例如 ARP、IPX 和 NetBEUI 数据包)。 |
有关详细信息,请参阅 SIO_RCVALL 参考。
Windows 2000 及更高版本支持SIO_RCVALL。
SIO_RCVALL_IGMPMCAST (作码设置: I, T==3)
允许套接字在网络上接收所有 IGMP 多播 IP 流量,而无需接收其他多播 IP 流量。 传递给 WSAIoctl 函数的套接字句柄必须AF_INET地址系列、SOCK_RAW套接字类型和IPPROTO_IGMP协议。 套接字还必须绑定到显式本地接口,这意味着不能绑定到INADDR_ANY。
绑定套接字并设置 IOCTL 后,对 WSARecv 或 recv 函数的调用将返回通过给定接口的多播 IP 数据报。 请注意,必须提供足够大的缓冲区。 设置此 IOCTL 需要本地计算机上的管理员权限。
Windows 2000 及更高版本支持SIO_RCVALL_IGMPMCAST。
SIO_RCVALL_MCAST (作码设置: I, T==3)
使套接字能够接收网络上的所有多播 IP 流量(即,目标为 224.0.0.0 到 239.255.255.255.255 范围内的 IP 地址的所有 IP 数据包)。 传递给 WSAIoctl 函数的套接字句柄必须AF_INET地址系列、SOCK_RAW套接字类型和IPPROTO_UDP协议。 套接字还必须绑定到显式本地接口,这意味着不能绑定到INADDR_ANY。 套接字应绑定到端口零。
绑定套接字并设置 IOCTL 后,对 WSARecv 或 recv 函数的调用将返回通过给定接口的多播 IP 数据报。 请注意,必须提供足够大的缓冲区。 设置此 IOCTL 需要本地计算机上的管理员权限。
Windows 2000 及更高版本支持SIO_RCVALL_MCAST。
SIO_RELEASE_PORT_RESERVATION (作码设置: I, T==3)
释放 TCP 或 UDP 端口块的运行时预留。 必须使用 SIO_ACQUIRE_PORT_RESERVATION IOCTL 从颁发过程获取要发布的运行时预留。
有关详细信息,请参阅 SIO_RELEASE_PORT_RESERVATION 参考。
Windows Vista 和更高版本的作系统支持SIO_RELEASE_PORT_RESERVATION。
SIO_ROUTING_INTERFACE_CHANGE (作码设置: I, T==1)
接收路由接口更改的通知,该更改应用于访问输入缓冲区中的远程地址(指定为 sockaddr 结构)。 完成此 IOCTL 后,不会提供有关新路由接口的输出信息;完成仅指示给定目标的路由接口已更改,应使用 SIO_ROUTING_INTERFACE_QUERY IOCTL 进行查询。
假设应用程序使用重叠的 I/O 通过完成 SIO_ROUTING_INTERFACE_CHANGE 请求通知路由接口更改,但这不是必需的。 或者,如果 SIO_ROUTING_INTERFACE_CHANGE IOCTL 在非阻塞套接字上发出,并将 lpOverlapped 和 lpCompletionRoutine 参数设置为 NULL),它将立即返回并返回 WSAEWOULDBLOCK 作为错误,然后应用程序可以通过调用 WSAEventSelect 或 WSAAsyncSelect 来等待路由更改事件,并在网络事件位掩码中设置FD_ROUTING_INTERFACE_CHANGE位。
据了解,在大多数情况下,路由信息保持稳定,因此,要求应用程序保留多个未完成的 IOCTL 以获取有关它感兴趣的所有目标的通知,以及让服务提供商跟踪这些通知请求将使用大量系统资源。 通过扩展输入参数的含义和放宽服务提供商要求,可以避免这种情况,如下所示:
- 应用程序可以指定协议系列特定的通配符地址(与请求绑定到任何可用地址时在 绑定 调用中使用的通配符地址相同)以请求任何路由更改的通知。 这允许应用程序只保留一个未完成 SIO_ROUTING_INTERFACE_CHANGE 的所有套接字和目标,然后使用 SIO_ROUTING_INTERFACE_QUERY 获取实际路由信息。
- 服务提供商可以选择忽略应用程序在 SIO_ROUTING_INTERFACE_CHANGE 输入缓冲区中指定的信息(就像应用程序指定通配符地址一样),并在发生任何路由信息更改时完成 SIO_ROUTING_INTERFACE_CHANGE IOCTL 或信号FD_ROUTING_INTERFACE_CHANGE事件(而不仅仅是路由到输入缓冲区中指定的目标的路由)。
SIO_ROUTING_INTERFACE_QUERY(作码设置:I、O、T==1)
获取本地接口(表示为 sockaddr 结构)的地址,该地址应用于发送到输入缓冲区中指定的远程地址(作为 sockaddr)。 远程多播地址可以在输入缓冲区中提交,以获取多播传输的首选接口的地址。 在任何情况下,应用程序都可以在后续 bind() 请求中使用返回的接口地址。
请注意,路由可能会更改。 因此,应用程序不能依赖于 SIO_ROUTING_INTERFACE_QUERY 返回的信息来持久化。 应用程序可以通过 SIO_ROUTING_INTERFACE_CHANGE IOCTL 注册路由更改通知,该 IOCTL 通过重叠 I/O 或FD_ROUTING_INTERFACE_CHANGE事件提供通知。 以下作序列可用于保证应用程序始终具有给定目标的当前路由接口信息:
- IOCTL SIO_ROUTING_INTERFACE_CHANGE 问题
- IOCTL SIO_ROUTING_INTERFACE_QUERY 问题
- 每当 SIO_ROUTING_INTERFACE_CHANGE IOCTL 通知路由更改的应用(通过重叠 I/O 或通过信号FD_ROUTING_INTERFACE_CHANGE事件),应重复整个作序列。
如果输出缓冲区不够大以包含接口地址,则返回SOCKET_ERROR作为此 IOCTL 的结果, WSAGetLastError 返回 WSAEFAULT。 在这种情况下,输出缓冲区的所需大小将在 lhttpBytesReturned 中返回。 请注意,如果 lpvInBuffer、lpvOutBuffer 或 lhttpBytesReturned 参数未完全包含在用户地址空间的有效部分,也会返回 WSAEFAULT 错误代码。
如果无法通过任何可用接口访问输入缓冲区中指定的目标地址,SOCKET_ERROR将返回此 IOCTL 的结果, WSAGetLastError 返回 WSAENETUNREACH ,甚至 WSAENETDOWN (如果所有网络连接丢失)。
SIO_SET_COMPATIBILITY_MODE (作码设置: I, T==3)
请求网络堆栈应如何处理某些行为,其中处理行为的默认方式可能因 Windows 版本而异。 SIO_SET_COMPATIBILITY_MODE的参数结构是在 Mswsockdef.h 头文件中定义的WSA_COMPATIBILITY_MODE结构中指定的。 此结构的定义如下:
/* Argument structure for SIO_SET_COMPATIBILITY_MODE */
typedef struct _WSA_COMPATIBILITY_MODE {
WSA_COMPATIBILITY_BEHAVIOR_ID BehaviorId;
ULONG TargetOsVersion;
} WSA_COMPATIBILITY_MODE, *PWSA_COMPATIBILITY_MODE;
BehaviorId 成员中指定的值指示请求的行为。 TargetOsVersion 成员中指定的值指示正在请求该行为的 Windows 版本。
BehaviorId 成员可以是 Mswsockdef.h 头文件中定义的WSA_COMPATIBILITY_BEHAVIOR_ID枚举类型中的值之一。 BehaviorId 成员的可能值如下所示。
术语 | DESCRIPTION |
---|---|
WsaBehaviorAll |
这相当于请求为 WSA_COMPATIBILITY_BEHAVIOR_ID定义的所有可能的兼容行为。 |
WsaBehaviorReceiveBuffering |
当 TargetOsVersion 成员设置为 Windows Vista 或更高版本的值时,即使建立 TCP 连接后,也允许使用 SO_RCVBUF 套接字选项减少此套接字上的 TCP 接收缓冲区大小。 当 TargetOsVersion 成员设置为早于 Windows Vista 的值时,在建立连接后不允许使用 SO_RCVBUF 套接字选项减少到此套接字上的 TCP 接收缓冲区大小。 |
WsaBehaviorAutoTuning |
当 TargetOsVersion 成员设置为 Windows Vista 或更高版本的值时,将启用接收窗口自动优化,并将 TCP 窗口缩放因子从默认值 8 减少到 2。 当 TargetOsVersion 设置为早于 Windows Vista 的值时,将禁用接收窗口自动优化。 TCP 窗口缩放选项也处于禁用状态,最大真实接收窗口大小限制为 65,535 字节。 即使在此套接字上调用 了SO_RCVBUF 套接字选项,指定在建立连接前的值大于 65,535 字节,TCP 窗口缩放选项也不能就连接进行协商。 |
有关详细信息,请参阅 SIO_SET_COMPATIBILITY_MODE 参考。
Windows Vista 及更高版本支持SIO_SET_COMPATIBILITY_MODE。
SIO_SET_GROUP_QOS (作代码设置: I, T==1)
保留。
SIO_SET_PRIORITY_HINT (作码设置: I, T==3)
向基础传输协议提供提示,以以特定优先级处理此套接字上的流量。 lpvInBuffer 必须指向类型为 PRIORITY_HINT 的变量,cbInBuffer 设置为 sizeof(PRIORITY_HINT)。 lpvOutBuffer 和 cbOutBuffer 参数必须分别为 NULL 和 0。 从 Windows 10 版本 1809 (10.0) 开始,Microsoft Windows TCP 实现支持此 IOCTL;内部版本 17763 及更高版本,如下所示:当请求的优先级值设置为 IoPriorityHintVeryLow 时,TCP 使用修改后的 LEDBAT 算法版本(在 RFC 6817 中定义)来控制套接字上的出站流量速率。 入站流量不受此 IOCTL 的影响。 LEDBAT 是一种寻道程序算法,其目标是保持低延迟并防止对正常优先级流量产生任何负面影响,方法是在正常优先级流量出现时退出。
另请参阅 RFC 6817。
Windows 10 版本 1809(10.0)支持SIO_SET_PRIORITY_HINT内部版本 17763) 及更高版本。
SIO_SET_QOS (作码设置: I, T==1)
将指定的 QOS 结构与套接字相关联。 不需要输出缓冲区,将从输入缓冲区获取 QOS 结构。 对于不支持服务质量的服务提供商,指示 WSAENOPROTOOPT 错误代码。
SIO_TCP_INITIAL_RTO (作码设置: I, T==3)
通过配置初始重新传输超时 (RTO) 参数来控制 TCP 套接字的初始(SYN/SYN+ACK)重新传输特征。 配置参数在 TCP_INITIAL_RTO_PARAMETERS 结构中指定。
有关详细信息,请参阅 SIO_TCP_INITIAL_RTO 参考。 Windows 8、Windows Server 2012 及更高版本支持SIO_TCP_INITIAL_RTO。
SIO_TIMESTAMPING
用于配置套接字传输/接收时间戳的接收的套接字 IOCTL。 仅适用于数据报套接字。 SIO_TIMESTAMPING的输入类型是TIMESTAMPING_CONFIG结构。
另请参阅 Winsock 时间戳。
SIO_TRANSLATE_HANDLE(作码设置:I、O、T==1)
获取在配套接口(例如,TH_NETDEV和TH_TAPI)上下文中 有效的套接字的 相应句柄。 在输入缓冲区中指定了标识配套接口的清单常量以及任何其他所需的参数。 完成此函数后,相应的句柄将在输出缓冲区中可用。 有关特定于特定配套界面的详细信息,请参阅 Winsock 附件 中的相应部分。 对于不支持指定配套接口的此 IOCTL 的服务提供商,指示 WSAENOPROTOOPT 错误代码。 此 IOCTL 检索使用 SIO_TRANSLATE_HANDLE关联的句柄。
建议使用组件对象模型(COM),而不是使用此 IOCTL 来发现和跟踪套接字可能支持的其他接口。 此 IOCTL 与 COM 不可用或不能用于其他原因的系统向后兼容。
SIO_UDP_CONNRESET (作码设置: I, T==3)
Windows XP: 控制是否报告 UDP PORT_UNREACHABLE消息。 设置为 TRUE 以启用报告。 设置为 FALSE 以禁用报告。
SIO_UDP_NETRESET
控制是否通过 recv/WSARecv/etc 在 UDP 套接字上报告 NET_UNREACHABLE (TTL 已过期)消息。在输入缓冲区中传递 TRUE 以启用(如果支持,则为默认值)。 传递 FALSE 以禁用报告。
SIO_SET_WFP_CONNECTION_REDIRECT_RECORDS (作码设置: I, T==3)
将重定向记录设置为用于连接到 Windows 筛选平台(WFP)重定向服务使用的最终目标的新的 TCP 套接字。
SIO_SET_WFP_CONNECTION_REDIRECT_RECORDS IOCTL 用作重定向套接字连接上代理连接跟踪的一部分。 此 WFP 功能有助于跟踪从连接到最终连接到目标的初始重定向的重定向记录。
有关详细信息,请参阅 SIO_SET_WFP_CONNECTION_REDIRECT_RECORDS 参考。 Windows 8、Windows Server 2012 及更高版本支持SIO_SET_WFP_CONNECTION_REDIRECT_RECORDS。
SIO_TCP_INFO(作码设置:I、O、T==3)
检索套接字的 TCP 统计信息。 TCP 统计信息在 TCP_INFO_v0 结构中提供。
与使用 GetPerTcpConnectionEStats 函数检索 TCP 统计信息不同,使用此控制代码检索 TCP 统计信息不需要用户代码加载、存储和筛选 TCP 连接表,也不需要提升的权限才能使用。
有关详细信息,请参阅 SIO_TCP_INFO。 Windows 10 版本 1703、Windows Server 2016 及更高版本支持SIO_TCP_INFO。
注解
Winsock Ioctls 在许多不同的头文件中定义。 其中包括 Winsock2.h、 Mswsock.h 和 Mstcpip.h 头文件。
在适用于 Windows Vista 及更高版本的 Microsoft Windows 软件开发工具包(SDK)上,头文件的组织已更改,并且 Ws2def.h、 Ws2ipdef.h 和 Mswsockdef.h 头文件中还定义了许多 Winsock Ioctls。 Winsock2.h 头文件自动包含 Ws2def.h 头文件。 Ws2ipdef.h 头文件由 Ws2tcpip.h 头文件自动包含。 Mswsockdef.h 头文件自动包含在 Mswsockdef.h 头文件中。
要求
要求 | 价值 |
---|---|
标题 |
|