SOL_SOCKET套接字选项
下表描述了 SOL_SOCKET 套接字选项。 有关获取和设置套接字选项的详细信息,请参阅 getsockopt 和 setsockopt 函数参考页。
若要枚举协议并发现每个已安装协议支持的属性,请使用 WSAEnumProtocols、 WSCEnumProtocols 或 WSCEnumProtocols32 函数。
某些套接字选项需要比这些表所能传达的更多解释;此类选项包含指向其他页面的链接。
注意
除了 SO_BROADCAST 之外,所有SOL_SOCKET套接字选项均同样适用于 IPv4 和 IPv6 (,因为不会在 IPv6) 中实现广播。
SOL_SOCKET套接字选项
选项 | 获取 | 设置 | Optval 类型 | 说明 |
---|---|---|---|---|
PVD_CONFIG | 是 | 是 | char [] | 包含服务提供程序的配置信息的不透明数据结构对象。 此选项依赖于实现。 |
SO_ACCEPTCONN | 是 | DWORD (布尔) | 返回套接字是否处于侦听模式。 此选项仅对面向连接的协议有效。 | |
SO_BROADCAST | 是 | 是 | DWORD (布尔) | 配置用于发送广播数据的套接字。 此选项仅对支持广播 (IPX 和 UDP 的协议有效,例如) 。 |
SO_BSP_STATE | 是 | CSADDR_INFO | 返回本地地址、本地端口、远程地址、远程端口、套接字类型和套接字使用的协议。 有关详细信息,请参阅 SO_BSP_STATE 参考。 | |
SO_CONDITIONAL_ACCEPT | 是 | 是 | DWORD (布尔) | 指示应用程序(而不是协议堆栈)是接受还是拒绝传入连接。 有关详细信息,请参阅 SO_CONDITIONAL_ACCEPT 参考。 |
SO_CONNDATA | 是 | 是 | char [] | 其他数据(不在正常网络数据流中)与网络请求一起发送以建立连接。 旧版协议(如 DECNet、OSI TP4 等)使用此选项。 Windows 中的 TCP/IP 协议不支持此选项。 |
SO_CONNDATALEN | 是 | DWORD | 附加数据的长度,以字节为单位,而不是在正常网络数据流中,与网络请求一起发送以建立连接。 旧版协议(如 DECNet、OSI TP4 等)使用此选项。 Windows 中的 TCP/IP 协议不支持此选项。 | |
SO_CONNECT_TIME | 是 | DWORD | 返回已连接套接字的秒数。 此选项仅对面向连接的协议有效。 | |
SO_CONNOPT | 是 | 是 | char [] | 其他连接选项数据(不在正常网络数据流中)与网络请求一起发送以建立连接。 旧版协议(如 DECNet、OSI TP4 等)使用此选项。 Windows 中的 TCP/IP 协议不支持此选项。 |
SO_CONNOPTLEN | 是 | DWORD | 连接选项数据的长度(以字节为单位),而不是在正常网络数据流中,该数据随网络请求一起发送以建立连接。 旧版协议(如 DECNet、OSI TP4 等)使用此选项。 Windows 中的 TCP/IP 协议不支持此选项。 | |
SO_DISCDATA | 是 | 是 | char [] | 其他数据(不在正常网络数据流中)与网络请求一起发送,以断开连接。 旧版协议(如 DECNet、OSI TP4 等)使用此选项。 Windows 中的 TCP/IP 协议不支持此选项。 |
SO_DISCDATALEN | 是 | DWORD | 附加数据的长度(以字节为单位),该长度不是在正常网络数据流中,随网络请求一起发送,以断开连接。 旧版协议(如 DECNet、OSI TP4 等)使用此选项。 Windows 中的 TCP/IP 协议不支持此选项。 | |
SO_DISCOPT | 是 | 是 | char [] | 其他断开连接选项数据,而不是在正常网络数据流中,随网络请求一起发送,以断开连接。 旧版协议(如 DECNet、OSI TP4 等)使用此选项。 Windows 中的 TCP/IP 协议不支持此选项。 |
SO_DISCOPTLEN | 是 | DWORD | 附加断开连接选项数据(而不是在正常网络数据流中)的长度(以字节为单位),该数据随网络请求一起发送以断开连接。 旧版协议(如 DECNet、OSI TP4 等)使用此选项。 Windows 中的 TCP/IP 协议不支持此选项。 | |
SO_DEBUG | 是 | 是 | DWORD (布尔) | 启用调试输出。 Microsoft 提供程序当前不输出任何调试信息。 |
SO_DONTLINGER | 是 | 是 | DWORD (布尔) | 指示与套接字关联的l_onoff结构的成员的状态。 如果此成员为非零,则套接字在 closesocket 函数调用后保持打开状态,以允许发送排队数据。 此选项仅对面向连接的可靠协议有效。 |
SO_DONTROUTE | 是 | 是 | DWORD (布尔) | 指示应在套接字绑定到的任何接口上发送传出数据,而不是在其他接口上路由的数据。 此选项仅对面向消息的协议有效。 Microsoft 提供商以无提示方式忽略此选项,并始终查阅路由表以查找相应的传出接口。 |
SO_ERROR | 是 | DWORD | 返回此套接字上的最后一个错误代码。 此每个套接字的错误代码并不总是立即设置的。 | |
SO_EXCLUSIVEADDRUSE | 是 | 是 | DWORD (布尔) | 阻止任何其他套接字绑定到同一地址和端口。 在调用 绑定 函数之前,必须设置此选项。 有关详细信息,请参阅 SO_EXCLUSIVEADDRUSE 参考。 |
SO_GROUP_ID | 是 | unsigned int | 此套接字选项是保留的,不应使用。 | |
SO_GROUP_PRIORITY | 是 | 是 | int | 此套接字选项是保留的,不应使用。 |
SO_KEEPALIVE | 是 | 是 | DWORD (布尔) | 为套接字连接启用保持连接。 仅对支持保持连接概念 (面向连接的协议) 的协议有效。 对于 TCP,默认的保持连接超时为 2 小时,保持连接间隔为 1 秒。 保持连接探测的默认数目因 Windows 版本而异。 有关详细信息,请参阅 SO_KEEPALIVE 参考。 |
SO_LINGER | 是 | 是 | 结构挥之不去 | 指示与套接字关联的 挥之不去 的结构的状态。 如果 linger 结构的 l_onoff 成员为非零值,则套接字在调用 closesocket 函数后保持打开状态,以允许发送排队数据。 在 linger 结构的 l_linger 成员中指定保持打开状态的时间(以秒为单位)。 此选项仅对面向连接的可靠协议有效。 |
SO_MAX_MSG_SIZE | 是 | DWORD | 返回协议支持的面向消息的套接字的最大出站消息大小。 对于面向流的套接字没有意义。 | |
SO_MAXDG | 是 | DWORD | 返回协议支持的出站数据报的最大大小(以字节为单位)。 此套接字选项对于面向流的套接字没有意义。 | |
SO_MAXPATHDG | 是 | DWORD | 返回协议支持到给定目标地址的出站数据报的最大大小(以字节为单位)。 此套接字选项对于面向流的套接字没有意义。 Microsoft 提供商可能会以无提示方式将此视为SO_MAXDG。 | |
SO_OOBINLINE | 是 | 是 | DWORD (布尔) | 指示应与常规数据一起返回超出边界的数据。 此选项仅适用于支持带外数据的面向连接的协议。 |
SO_OPENTYPE | 是 | 是 | DWORD | 设置后,将影响创建的后续套接字是否不重叠。 此选项的可能值为SO_SYNCHRONOUS_ALERT和SO_SYNCHRONOUS_NONALERT。 不应使用此选项。 请改用 WSASocket 函数并关闭 dwFlags 参数中的WSA_FLAG_OVERLAPPED位。 |
SO_PAUSE_ACCEPT | 是 | 是 | DWORD (布尔) | 使用此选项侦听套接字。 设置 选项后,套接字将使用 RST 响应所有传入连接,而不是接受它们。 |
SO_PORT_SCALABILITY | 是 | 是 | DWORD (布尔) | 通过为本地计算机上的不同本地地址端口对多次分配通配符端口,允许最大化端口分配,从而为套接字启用本地端口可伸缩性。 在两个选项都可用的平台上,首选SO_REUSE_UNICASTPORT而不是此选项。 有关详细信息,请参阅 SO_PORT_SCALABILITY 参考。 |
SO_PROTOCOL_INFO | 是 | WSAPROTOCOL_INFO | 如果定义了 UNICODE 宏,则会将此选项定义为 SO_PROTOCOL_INFOW 套接字选项。 如果未定义 UNICODE 宏,则会将此选项定义为 SO_PROTOCOL_INFOA 套接字选项。 | |
SO_PROTOCOL_INFOA | 是 | WSAPROTOCOL_INFOA | 返回给定套接字 的WSAPROTOCOL_INFOA 结构 | |
SO_PROTOCOL_INFOW | 是 | WSAPROTOCOL_INFOW | 返回给定套接字 的WSAPROTOCOL_INFOW 结构 | |
SO_RANDOMIZE_PORT | 是 | 是 | DWORD (布尔) | 应在未绑定的套接字上设置此选项。 设置SO_RANDOMIZE_PORT并在套接字上选择临时端口时,将绑定随机端口号。 使用 SO_REUSE_UNICASTPORT) 选择的端口 (自动重用端口也会随机化返回的端口,因此,如果应用程序SO_REUSE_UNICASTPORT然后尝试设置SO_RANDOMIZE_PORT,则第二 个 setockopt 调用将失败。 |
SO_RCVBUF | 是 | 是 | DWORD | 为接收保留的每个套接字缓冲区总空间。 这与SO_MAX_MSG_SIZE无关,不一定对应于 TCP 接收窗口的大小。 |
SO_RCVLOWAT | 是 | 是 | DWORD | 包含 BSD UNIX 中的套接字选项,用于向后兼容。 此选项设置套接字输入操作要处理的最小字节数。 Windows TCP/IP 提供程序不支持此选项。 如果在 Windows Vista 及更高版本上使用此选项, 则 getsockopt 和 setsockopt 函数将失败并出现 WSAEINVAL。 在早期版本的 Windows 上,这些函数失败并出现 WSAENOPROTOOPT。 |
SO_RCVTIMEO | 是 | 是 | DWORD | 阻止接收调用的超时(以毫秒为单位)。 此选项的默认值为零,表示接收操作不会超时。如果阻止接收调用超时,则连接处于不确定状态,应关闭。 如果使用 WSASocket 函数创建套接字,则 dwFlags 参数必须设置 WSA_FLAG_OVERLAPPED 属性才能使超时正常工作。 否则,超时永远不会生效。 |
SO_REUSEADDR | 是 | 是 | DWORD (布尔) | 允许套接字绑定到已在使用的地址和端口。 SO_EXCLUSIVEADDRUSE选项可以阻止这种情况。 |
SO_REUSE_UNICASTPORT | 是 | 是 | DWORD (布尔) | 设置后,允许 Winsock API 连接函数重复使用需要显式绑定的临时端口,例如 ConnectEx。 请注意,具有隐式绑定 (的连接函数(例如,在没有显式绑定的情况下进行连接) 默认设置了此选项。 使用此选项,而不是在两者都可用的平台上 SO_PORT_SCALABILITY 。 |
SO_REUSE_MULTICASTPORT | 是 | DWORD | 在套接字上设置此选项时,表示永远不会使用该套接字接收单播数据包,因此,其端口可以与其他仅多播应用程序共享。 将值设置为 1 可始终在端口上共享多播流量。 将值设置为 0 (默认) 会禁用此行为。 | |
SO_SNDBUF | 是 | 是 | DWORD | 为发送保留的每个套接字缓冲区总空间。 这与SO_MAX_MSG_SIZE无关,不一定对应于 TCP 发送窗口的大小。 |
SO_SNDLOWAT | 是 | 是 | DWORD | 包含 BSD UNIX 中的套接字选项,用于向后兼容。 此选项设置要处理的套接字输出操作的最小字节数。 Windows TCP/IP 提供程序不支持此选项。 如果在 Windows Vista 及更高版本上使用此选项, 则 getsockopt 和 setsockopt 函数将失败并出现 WSAEINVAL。 在早期版本的 Windows 上,这些函数失败并出现 WSAENOPROTOOPT。 |
SO_SNDTIMEO | 是 | 是 | DWORD | 阻止发送调用的超时(以毫秒为单位)。 此选项的默认值为零,表示发送操作不会超时。如果阻止发送调用超时,则连接处于不确定状态,应关闭。 如果使用 WSASocket 函数创建套接字,则 dwFlags 参数必须设置 WSA_FLAG_OVERLAPPED 属性才能使超时正常工作。 否则,超时永远不会生效。 |
SO_TYPE | 是 | DWORD | 返回给定套接字 (SOCK_STREAM或SOCK_DGRAM的套接字类型,例如) 。 | |
SO_UPDATE_ACCEPT_CONTEXT | 是 | DWORD (布尔) | 此选项与 AcceptEx 函数一起使用。 此选项更新从侦听套接字继承的套接字的属性。 如果要在接受的套接字上使用 getpeername、 getockname、 getockopt 或 setsockopt 函数,则应设置此选项。 | |
SO_UPDATE_CONNECT_CONTEXT | 是 | DWORD (布尔) | 此选项与 ConnectEx、 WSAConnectByList 和 WSAConnectByName 函数一起使用。 建立连接后,此选项将更新套接字的属性。 如果要在连接的套接字上使用 getpeername、 getockname、 getockopt、 setsockopt 或 shutdown 函数,则应设置此选项。 | |
SO_USELOOPBACK | 是 | 是 | DWORD (布尔) | 从此套接字发送数据时,请使用本地环回地址。 仅当发送的所有数据也将在本地接收时,才应使用此选项。 Windows TCP/IP 提供程序不支持此选项。 如果在 Windows Vista 及更高版本上使用此选项, 则 getsockopt 和 setsockopt 函数将失败并显示 WSAEINVAL。 在早期版本的 Windows 上,这些函数失败并显示 WSAENOPROTOOPT。 |
Windows 对SOL_SOCKET选项的支持
选项 | Windows 10 | Windows 7 | Windows Server 2008 | Windows Vista | Windows Server 2003 | Windows XP | Windows 2000 | Windows NT4 | Windows 9x/ME |
---|---|---|---|---|---|---|---|---|---|
PVD_CONFIG | |||||||||
SO_ACCEPTCONN | x | x | x | x | x | x | x | x | x |
SO_BROADCAST | x | x | x | x | x | x | x | x | x |
SO_BSP_STATE | x | x | x | x | |||||
SO_CONDITIONAL_ACCEPT | x | x | x | x | x | x | x | ||
SO_CONNDATA | x | x | x | x | x | x | x | x | |
SO_CONNDATALEN | x | x | x | x | x | x | x | x | |
SO_CONNECT_TIME | x | x | x | x | x | x | x | x | x |
SO_CONNOPT | x | x | x | x | x | x | x | x | |
SO_CONNOPTLEN | x | x | x | x | x | x | x | x | |
SO_DISCDATA | x | x | x | x | x | x | x | x | |
SO_DISCDATALEN | x | x | x | x | x | x | x | x | |
SO_DISCOPT | x | x | x | x | x | x | x | x | |
SO_DISCOPTLEN | x | x | x | x | x | x | x | x | |
SO_DEBUG | x | x | x | x | x | x | x | x | x |
SO_DONTLINGER | x | x | x | x | x | x | x | x | x |
SO_DONTROUTE | x | x | x | x | x | x | x | x | x |
SO_ERROR | x | x | x | x | x | x | x | x | x |
SO_EXCLUSIVEADDRUSE | x | x | x | x | x | x | x | x SP4+ | |
SO_GROUP_ID | x | x | x | x | |||||
SO_GROUP_PRIORITY | x | x | x | x | |||||
SO_KEEPALIVE | x | x | x | x | x | x | x | x | x |
SO_LINGER | x | x | x | x | x | x | x | x | x |
SO_MAX_MSG_SIZE | x | x | x | x | x | x | x | x | x |
SO_MAXDG | x | x | x | x | x | x | x | ||
SO_MAXPATHDG | x | x | x | x | x | x | x | ||
SO_OOBINLINE | x | x | x | x | x | x | x | x | x |
SO_OPENTYPE | x | x | x | x | x | x | x | x | x |
SO_PORT_SCALABILITY | x | x | x | ||||||
SO_PROTECT | x | ||||||||
SO_PROTOCOL_INFO | x | x | x | x | x | x | x | x | x |
SO_PROTOCOL_INFOA | x | x | x | x | x | x | x | x | x |
SO_PROTOCOL_INFOW | x | x | x | x | x | x | x | x | x |
SO_RCVBUF | x | x | x | x | x | x | x | x | x |
SO_RCVLOWAT | |||||||||
SO_RCVTIMEO | x | x | x | x | x | x | x | x | x |
SO_RANDOMIZE_PORT | x | x | x | x | |||||
SO_REUSEADDR | x | x | x | x | x | x | x | x | x |
SO_REUSE_UNICASTPORT | x | ||||||||
SO_REUSE_MULTICASTPORT | x | ||||||||
SO_SNDBUF | x | x | x | x | x | x | x | x | x |
SO_SNDLOWAT | |||||||||
SO_SNDTIMEO | x | x | x | x | x | x | x | x | x |
SO_TYPE | x | x | x | x | x | x | x | x | x |
SO_UPDATE_ACCEPT_CONTEXT | x | x | x | x | x | x | x | x | |
SO_UPDATE_CONNECT_CONTEXT | x | x | x | x | x | x | |||
SO_USELOOPBACK |
备注
SOL_SOCKET套接字选项在多个 Winsock 头文件中定义:
- Winsock2.h
- Mswsock.h
- Ws2def.h
在为 Windows Vista 及更高版本发布的 Microsoft Windows 软件开发工具包 (SDK) 上,头文件的组织方式已更改, SOL_SOCKET 级别在 Winsock2.h 头文件中自动包含在 Winsock2.h 头文件中。 某些 SOL_SOCKET 套接字选项在 Winsock2.h 和 Mswsock.h 头文件中定义。 其余SOL_SOCKET套接字选项在 Winsock2.h 头文件自动包含的 Ws2def.h 头文件中定义。 永远不应直接使用 Ws2def.h 。
在为 Windows Server 2003 和 Windows XP 发布的平台软件开发工具包 (SDK) 上, SOL_SOCKET 级别在 Winsock2.h 头文件中定义。 SOL_SOCKET套接字选项在 Winsock2.h 和 Mswsock.h 头文件中定义。
要求
要求 | 值 |
---|---|
标头 |
|