IPV6_PKTINFO套接字选项

IPV6_PKTINFO套接字选项允许应用程序在 IPv6 套接字上启用或禁用 LPFN_WSARECVMSG (WSARecvMsg) 函数返回数据包信息。

若要查询此套接字选项的状态,请调用 getsockopt 函数。 若要设置此选项,请使用以下参数调用 setsockopt 函数。

套接字选项值

表示此套接字选项的常量为 19。

语法

int getsockopt(
  (SOCKET) s,      // descriptor identifying a socket 
  (int) IPPROTO_IPV6,   // level
  (int) IPV6_PKTINFO, // optname
  (char *) optval, // output buffer,
  (int) optlen,  // size of output buffer
);
int setsockopt(
  (SOCKET) s,      // descriptor identifying a socket 
  (int) IPPROTO_IPV6,   // level
  (int) IPV6_PKTINFO, // optname
  (char *) optval, // input buffer,
  (int) optlen,  // size of input buffer
);

parameters

s [in]

标识套接字的描述符。

level [in]

定义选项的级别。 对此操作使用 IPPROTO_IPV6

optname [in]

要获取或设置值的套接字选项。 对此操作使用 IPV6_PKTINFO。

optval [out]

指向缓冲区的指针,其中包含要设置的选项的值。 此参数应指向等于或大于 DWORD 值大小的缓冲区。

此值被视为布尔值,0 用于指示 FALSE (禁用) ,非零值表示 TRUE (启用) 。

optlen [in, out]

指向 optval 缓冲区的大小(以字节为单位)的指针。 此大小必须等于或大于 DWORD 值的大小。

返回值

如果操作成功完成, 则 getsockoptsetsockopt 函数将返回零。

如果操作失败,则返回值 SOCKET_ERROR,并且可以通过调用 WSAGetLastError 检索特定的错误代码。

错误代码 含义
WSANOTINITIALISED
在使用此函数之前,必须成功调用 WSAStartup
WSAENETDOWN
网络子系统发生故障。
WSAEFAULT
optvaloptlen 参数之一指向不在用户地址空间有效部分中的内存。 如果 optlen 参数指向的值小于 DWORD 值的大小,则也会返回此错误。
WSAEINPROGRESS
阻止 Windows 套接字 1.1 调用正在进行,或者服务提供商仍在处理回调函数。
WSAEINVAL
提供了无效的参数。 如果 级别 参数未知或无效,则返回此错误。 在 Windows Vista 及更高版本中,如果套接字处于过渡状态,也会返回此错误。
WSAENOPROTOOPT
选项未知或不受所指示的协议系列支持。 如果 s 参数中传递的套接字描述符的类型参数未SOCK_DGRAM或SOCK_RAW,则返回此错误
WSAENOTSOCK
:描述符不是套接字。

 

备注

使用 IPV6_PKTINFO 套接字选项调用的 getsockopt 函数允许应用程序确定是否由 LPFN_WSARECVMSG (WSARecvMsg) 函数为 IPv6 套接字返回数据包信息。

使用 IPV6_PKTINFO 套接字选项调用的 setsockopt 函数允许应用程序启用或禁用 LPFN_WSARECVMSG (WSARecvMsg) 函数返回数据包信息。 默认情况下, (设置为 FALSE) ,将禁用套接字的IPV6_PKTINFO选项。

SOCK_DGRAMSOCK_RAW 类型的 IPv6 套接字上启用此套接字选项时,LPFN_WSARECVMSG (WSARecvMsg) 函数将返回 lpMsg 参数指向的 WSAMSG 结构中的数据包信息。 返回的 WSAMSG 结构中的控制数据对象之一将包含用于存储接收的数据包地址信息的 in6_pktinfo 结构。

对于 LPFN_WSARECVMSG (WSARecvMsg) 函数通过 IPv6 接收的数据报,接收的 WSAMSG 结构的 Control 成员将包含包含 WSACMSGHDR 结构的 WSABUF 结构。WSACMSGHDR 结构的cmsg_level成员将包含IPPROTO_IPV6,此结构的cmsg_type成员将包含IPV6_PKTINFOcmsg_data成员将包含用于存储收到的 IPv6 数据包地址信息的in6_pktinfo结构。 in6_pktinfo结构中的 IPv6 地址是从中接收数据包的 IPv6 地址。

对于双堆栈数据报套接字,如果应用程序需要 LPFN_WSARECVMSG (WSARecvMsg) 函数在 WSAMSG 结构中返回通过 IPv4 接收的数据报的数据包信息,则必须在套接字上将 IP_PKTINFO 套接字选项设置为 true。 如果在套接字上仅将IPV6_PKTINFO选项设置为 true,则会为通过 IPv6 接收的数据报提供数据包信息,但可能不会为通过 IPv4 接收的数据报提供数据包信息。

请注意, Ws2ipdef.h 头文件会自动包含在 Ws2tcpip.h 中,永远不应直接使用。

要求

要求
最低受支持的客户端
Windows XP [仅限桌面应用]
最低受支持的服务器
Windows Server 2003 [仅限桌面应用]
标头
Ws2ipdef.h (包括 Ws2tcpip.h)

请参阅

双堆栈套接字

getsockopt

in6_pktinfo

IP_PKTINFO

IPPROTO_IPV6套接字选项

setsockopt

socket

WSAMSG

LPFN_WSARECVMSG (WSARecvMsg)