SOL_SOCKET套接字选项

下表描述了 SOL_SOCKET 套接字选项。 有关获取和设置套接字选项的详细信息,请参阅 getsockoptsetsockopt 函数参考页。

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

某些套接字选项需要比这些表所能传达的更多解释;此类选项包含指向其他页面的链接。

注意

除了 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 及更高版本上使用此选项, 则 getsockoptsetsockopt 函数将失败并出现 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 及更高版本上使用此选项, 则 getsockoptsetsockopt 函数将失败并出现 WSAEINVAL。 在早期版本的 Windows 上,这些函数失败并出现 WSAENOPROTOOPT。
SO_SNDTIMEO DWORD 阻止发送调用的超时(以毫秒为单位)。 此选项的默认值为零,表示发送操作不会超时。如果阻止发送调用超时,则连接处于不确定状态,应关闭。
如果使用 WSASocket 函数创建套接字,则 dwFlags 参数必须设置 WSA_FLAG_OVERLAPPED 属性才能使超时正常工作。 否则,超时永远不会生效。
SO_TYPE DWORD 返回给定套接字 (SOCK_STREAM或SOCK_DGRAM的套接字类型,例如) 。
SO_UPDATE_ACCEPT_CONTEXT DWORD (布尔) 此选项与 AcceptEx 函数一起使用。 此选项更新从侦听套接字继承的套接字的属性。 如果要在接受的套接字上使用 getpeernamegetocknamegetockoptsetsockopt 函数,则应设置此选项。
SO_UPDATE_CONNECT_CONTEXT DWORD (布尔) 此选项与 ConnectExWSAConnectByListWSAConnectByName 函数一起使用。 建立连接后,此选项将更新套接字的属性。 如果要在连接的套接字上使用 getpeernamegetocknamegetockoptsetsockoptshutdown 函数,则应设置此选项。
SO_USELOOPBACK DWORD (布尔) 从此套接字发送数据时,请使用本地环回地址。 仅当发送的所有数据也将在本地接收时,才应使用此选项。 Windows TCP/IP 提供程序不支持此选项。 如果在 Windows Vista 及更高版本上使用此选项, 则 getsockoptsetsockopt 函数将失败并显示 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.hMswsock.h 头文件中定义。 其余SOL_SOCKET套接字选项在 Winsock2.h 头文件自动包含的 Ws2def.h 头文件中定义。 永远不应直接使用 Ws2def.h

在为 Windows Server 2003 和 Windows XP 发布的平台软件开发工具包 (SDK) 上, SOL_SOCKET 级别在 Winsock2.h 头文件中定义。 SOL_SOCKET套接字选项在 Winsock2.hMswsock.h 头文件中定义。

要求

要求
标头
Winsock2.h;
Mswsock.h;
Ws2def.h (包括 Winsock2.h)