LPWSPGETSOCKOPT 回调函数 (ws2spi.h)

LPWSPGetSockOpt 函数检索套接字选项。

语法

LPWSPGETSOCKOPT Lpwspgetsockopt;

int Lpwspgetsockopt(
  SOCKET s,
  int level,
  int optname,
  char *optval,
  LPINT optlen,
  LPINT lpErrno
)
{...}

参数

s

标识套接字的描述符。

level

定义选项的级别;支持的级别包括 SOL_SOCKET。 (有关更多特定于协议的级别,请参阅附件。)

optname

要为其检索值的套接字选项。

optval

一个指向缓冲区的指针,在该缓冲区中,将返回所请求的选项的值。

optlen

指向 optval 缓冲区的大小(以字节为单位)的指针。

lpErrno

指向错误代码的指针。

返回值

如果未发生错误, 则 LPWSPGetSockOpt 返回零。 否则,将返回值 SOCKET_ERROR,并且 lpErrno 中提供了特定的错误代码。

错误代码 含义
WSAENETDOWN
网络子系统发生故障。
WSAEFAULT
optvaloptlen 参数之一不是用户地址空间的有效部分,或者 optlen 参数太小。
WSAEINVAL
级别未知或无效。
WSAEINPROGRESS
在回调正在进行时调用函数。
WSAENOPROTOOPT
选项未知或不受所指示的协议系列支持。
WSAENOTSOCK
:描述符不是套接字。

注解

LPWSPGetSockOpt 函数检索与任何类型、处于任何状态的套接字关联的套接字选项的当前值,并将结果存储在 optval 中。 选项可以存在于多个协议级别,但它们始终存在于最上面的套接字级别。 选项会影响套接字操作,例如数据包路由和 OOB 数据传输。

与所选选项关联的值在缓冲区 optval 中返回。 optlen 指向的整数最初应包含此缓冲区的大小;返回时,它将设置为返回的值的大小。 对于SO_LINGER,这是结构挥之不去的大小;对于大多数其他选项,它将是整数的大小。

Windows 套接字 SPI 客户端负责分配它指定的任何参数直接或间接指向的任何内存空间。

如果从未使用 LPWSPSetSockOpt 设置选项,则 LPWSPGetSockOpt 返回选项的默认值。

有关套接字选项的详细信息,请参阅 套接字选项

level = SOL_SOCKET

类型 含义 默认
SO_ACCEPTCONN BOOL 套接字正在通过 LPWSPListen 侦听。 FALSE ,除非已执行 LPWSPListen
SO_BROADCAST BOOL 套接字配置为用于传输和接收广播消息。 FALSE
SO_DEBUG BOOL 已启用调试。 FALSE
SO_DONTLINGER BOOL 如果为 true,则禁用SO_LINGER选项。 TRUE
SO_DONTROUTE BOOL 路由功能被禁用。 设置此套接字选项成功,但在AF_INET套接字上将被忽略;在具有 WSAENOPROTOOPT 的AF_INET6套接字上失败。 ATM 套接字不支持此选项, (导致错误) 。 FALSE
SO_ERROR 整型 检索错误状态并清除。 0
SO_GROUP_ID GROUP 保留。 Null
SO_GROUP_PRIORITY 整型 保留。 0
SO_KEEPALIVE BOOL 正在发送 Keepalives。 不支持 ATM 套接字 (会导致) 错误。 FALSE
SO_LINGER LINGER 结构 返回当前的逗留选项。 1 处于默认) (,0 处于关闭状态
SO_MAX_MSG_SIZE 无符号整数 面向消息的套接字类型的消息的最大大小 (例如,SOCK_DGRAM) 。 对于面向流的套接字没有意义。 依赖于实现
SO_OOBINLINE BOOL 正在正常数据流中接收 OOB 数据。 FALSE
SO_PROTOCOL_INFO WSAPROTOCOL_INFO 结构 绑定到此套接字的协议的协议信息的说明。 依赖于协议
SO_RCVBUF 整型 为接收保留的每个套接字的总缓冲区空间。 这与SO_MAX_MSG_SIZE无关,也不一定对应于 TCP 接收窗口的大小。 与实现相关
SO_REUSEADDR BOOL 套接字可以绑定到已在使用的地址。 此选项不适用于 ATM 套接字。 FALSE
SO_SNDBUF 整型 为发送保留的每个套接字缓冲区总空间。 这与SO_MAX_MSG_SIZE无关,也不一定对应于 TCP 发送窗口的大小。 与实现相关
SO_TYPE 整型 套接字 (的类型,例如,SOCK_STREAM) 。 使用 LPWSPSocket“>LPWSPSocket 创建时
PVD_CONFIG 服务提供程序依赖 套接字关联的服务提供程序中的不透明数据结构对象。 此对象存储服务提供程序的当前配置信息。 此数据结构的确切格式是特定于服务提供程序的。 与实现相关

 

使用不支持的选项调用 LPWSPGetSockOpt 将导致在 lpErrno 中返回 WSAENOPROTOOPT 错误代码。

SO_DEBUG

如果 windows 套接字 SPI 客户端设置了SO_DEBUG选项,则建议 windows 套接字服务提供程序 (但不要求) 提供输出调试信息。 生成调试信息的机制及其采用的形式超出了本规范的范围。

SO_ERROR

SO_ERROR选项返回并重置基于每个套接字的错误代码 (,该错误代码不一定与 WS2_32.DLL) 维护的每线程错误代码相同。 在套接字上成功调用 Windows 套接字不会重置 SO_ERROR 选项返回的基于套接字的错误代码。

SO_GROUP_ID

保留。 此值应为 NULL

SO_GROUP_PRIORITY

保留。

SO_KEEPALIVE

Windows 套接字 SPI 客户端可以通过打开 SO_KEEPALIVE 套接字选项,请求 TCP/IP 服务提供程序允许在 TCP 连接上使用保持连接数据包。 Windows 套接字提供程序不需要支持使用 keep-alive:如果支持,则精确语义特定于实现,但应符合 RFC 1122: Internet 主机的要求 - 通信层的第 4.2.3.6 节。 (此资源可能仅以英语提供。) 如果连接因保持连接而断开,则错误代码 WSAENETRESET 将返回到套接字上正在进行的任何调用,并且任何后续调用都将失败并出现 WSAENOTCONN

SO_LINGER

SO_LINGER控制未发送的数据在套接字上排队并执行 LPWSPCloseSocket 时执行的操作。 有关SO_LINGER设置影响 LPWSPCloseSocket 语义的方式的说明,请参阅 LPWSPCloseSocket。 Windows 套接字 SPI 客户端通过使用以下元素创建 optval 参数 (指向的 LINGER 结构来获取所需的行为) :

}

SO_MAX_MSG_SIZE

这是一个仅获取套接字选项,它指示面向消息的套接字类型 (出站发送消息的最大大小,例如,SOCK_DGRAM) 由服务提供商实现。 它对于面向字节流的套接字没有意义。 没有用于确定最大入站消息大小的设置。

SO_PROTOCOL_INFOW

这是一个 get-only 选项,它提供与此套接字关联的 WSAPROTOCOL_INFO 结构。 有关此结构的详细信息,请参阅 WSCEnumProtocols

SO_SNDBUF

当 Windows 套接字服务提供程序支持SO_RCVBUF和SO_SNDBUF选项时,Windows 套接字 SPI 客户端可以使用 LPWSPSetSockOpt 请求不同的缓冲区大小 (更大或更小) 。 即使服务提供商没有提供请求的整个金额,调用也可以成功。 Windows 套接字 SPI 客户端必须使用相同的选项调用此函数,才能检查实际提供的缓冲区大小。

SO_REUSEADDR

默认情况下,无法将套接字绑定 (请参阅 LPWSPBind) 到已在使用的本地地址。 但是,有时可能需要以这种方式重用地址。 由于每个连接都是通过本地地址和远程地址的组合唯一标识的,因此只要远程地址不同,将两个套接字绑定到同一个本地地址就没有问题。 若要通知 Windows 套接字提供程序应允许套接字上的 LPWSPBind 绑定到另一个套接字已在使用的本地地址,Windows 套接字 SPI 客户端应在发出 LPWSPBind 之前为套接字设置SO_REUSEADDR套接字选项。 请注意, 选项仅在 LPWSPBind 时解释。 因此,在未绑定到现有地址的套接字上设置选项,并在 LPWSPBind 之后设置或重置选项对它或任何其他套接字无效,这是不必要的 (但) 无害的。

PVD_CONFIG

此选项从 与套接字关联的服务提供程序中检索不透明的数据结构对象。 此对象存储服务提供程序的当前配置信息。 此数据结构的确切格式特定于服务提供程序。

要求

要求
最低受支持的客户端 Windows 2000 Professional [仅限桌面应用]
最低受支持的服务器 Windows 2000 Server [仅限桌面应用]
标头 ws2spi.h

另请参阅

LPWSPSetSockOpt

LPWSPSocket