共用方式為


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
);

參數

s [in]

識別通訊端的描述項。

層級 [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 Sockets 1.1 呼叫正在進行中,或服務提供者仍在處理回呼函式。
WSAEINVAL
提供的引數無效。 如果 level 參數未知或無效,則會傳回此錯誤。 在 Windows Vista 和更新版本上,如果通訊端處於過渡狀態,也會傳回此錯誤。
WSAENOPROTOOPT
指定的通訊協定系列未知或不支援此選項。 如果未SOCK_DGRAMSOCK_RAW傳入通訊端描述元的型別參數,就會傳回此錯誤。
WSAENOTSOCK
描述項不是通訊端。

 

備註

使用 IPV6_PKTINFO 通訊端選項呼叫的 getsockopt 函式可讓應用程式判斷是否要由 IPv6 通訊端的 LPFN_WSARECVMSG (WSARecvMsg) 函式傳回封包資訊。

使用 IPV6_PKTINFO 通訊端選項呼叫的 setsockopt 函式可讓應用程式啟用或停用 LPFN_WSARECVMSG (WSARecvMsg) 函式傳回封包資訊。 預設會停用通訊端IPV6_PKTINFO選項, (設為 FALSE) 。

類型為 SOCK_DGRAMSOCK_RAW的 IPv6 通訊端上啟用此通訊端選項時,LPFN_WSARECVMSG (WSARecvMsg) 函式會在lpMsg參數所指向的WSAMSG結構中傳回封包資訊。 傳回 之 WSAMSG 結構中的其中一個控制資料物件將包含用來儲存已接收封包位址資訊的 in6_pktinfo 結構。

對於透過 IPv6 LPFN_WSARECVMSG (WSARecvMsg) 函式所接收的資料包,所收到的WSAMSG結構的Control成員將包含包含WSACMSGHDR結構的WSABUF結構。 此WSACMSGHDR結構的cmsg_level成員會包含IPPROTO_IPV6、此結構的cmsg_type成員會包含IPV6_PKTINFO,而cmsg_data成員會包含用來儲存所接收 IPv6 封包位址資訊的in6_pktinfo結構。 in6_pktinfo結構中的 IPv6 位址是接收封包的來源 IPv6 位址。

針對雙堆疊資料包通訊端,如果應用程式需要 LPFN_WSARECVMSG (WSARecvMsg) 函式,才能針對透過 IPv4 接收的資料包傳回 WSAMSG 結構中的封包資訊,則通訊端上必須 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)