IPPROTO_IPV6 通訊端選項

下表說明 適用於針對 IPv6 位址系列 (AF_INET6) 建立的套接字的IPPROTO_IPV6 套接字選項。 如需取得和設定套接字選項的詳細資訊,請參閱 getsockopt 和 setsockopt 函式參考頁面。

若要列舉每個已安裝通訊協定的通訊協定和探索支援的屬性,請使用WSAEnumProtocolsWSCEnumProtocols WSCEnumProtocols32 函式。

某些套接字選項需要比這些數據表所能傳達更多的說明;這類選項包含其他信息的連結。

選項。

選項 get set Optval 類型 描述
IP_ORIGINAL_ARRIVAL_IF DWORD (布爾值) 指出LPFN_WSARECVMSG (WSARecvMsg) 函式是否應該傳回選擇性控制數據,其中包含接收數據報套接字封包的原始抵達介面。 此選項與 IPv6 轉換技術(例如 6to4、ISATAP 和 Teredo 通道)搭配使用,可在 IPv6 主機周遊 IP4 網路以連線到其他 IPv6 網路時,提供單播 IPv6 流量的位址指派和主機對主機自動通道。 IPv6 封包是以通道方式傳送為 IPv4 封包。 此選項允許在 WSAMSG 結構中傳回封包的原始 IPv4 介面。
IPV6_ADD_IFLIST DWORD (IF_INDEX) 將介面索引新增至與 IP_IFLIST 選項相關聯的 IFLIST。
IPV6_ADD_MEMBERSHIP ipv6_mreq 將套接字加入指定介面上提供的多播群組。 此選項僅適用於數據報和原始套接字(套接字類型必須是SOCK_DGRAM或SOCK_RAW)。
IPV6_DEL_IFLIST DWORD (IF_INDEX) 從與 IP_IFLIST 選項相關聯的 IFLIST 中移除介面索引。 專案只能由應用程式移除,因此請注意,移除介面之後,專案可能會過時。
IPV6_DROP_MEMBERSHIP ipv6_mreq 讓提供的多播群組遠離指定的介面。 此選項僅適用於數據報和原始套接字(套接字類型必須是SOCK_DGRAM或SOCK_RAW)。
IPV6_GET_IFLIST DWORD[] (IF_INDEX[]) 取得與 IP_IFLIST 選項相關聯的目前 IFLIST。 如果未 啟用IP_IFLIST ,則傳回錯誤。
IPV6_HDRINCL DWORD(布爾值) 指出應用程式提供所有傳出數據的 IPv6 標頭。 如果 optval 參數在呼叫 setockopt 時設定為 1,則會啟用此選項。 如果 optval 設定為 0,則會停用此選項。 預設值為停用。 此選項僅適用於數據報和原始套接字(套接字類型必須是SOCK_DGRAM或SOCK_RAW)。 支援SOCK_RAW的 TCP/IP 服務提供者也應該支援IPV6_HDRINCL。
IPV6_HOPLIMIT DWORD (布爾值) 表示應該在 LPFN_WSARECVMSG (WSARecvMsg) 函式中 傳回躍點 (TTL) 資訊。 如果在呼叫 setockopt 時將 optval 設定為 1,則會啟用此選項。 如果設定為 0,則會停用選項。 此選項僅適用於數據報和原始套接字(套接字類型必須是SOCK_DGRAM或SOCK_RAW)。
IPV6_IFLIST DWORD (布爾值) 取得或設定套接字IP_IFLIST狀態。 當此選項設定為 true 時,Datagram 接收會限制為 IFLIST 中的介面。 系統會忽略任何其他介面上收到的數據報。 IFLIST 會啟動空白。 使用 IP_ADD_IFLISTIP_DEL_IFLIST 來編輯 IFLIST。
IPV6_JOIN_GROUP ipv6_mreq 與IPV6_ADD_MEMBERSHIP相同
IPV6_LEAVE_GROUP ipv6_mreq 與IPV6_DROP_MEMBERSHIP相同
IPV6_MTU 下載 取得系統路徑 MTU 的估計值。 套接字必須連接。
IPV6_MTU_DISCOVER DWORD (PMTUD_STATE 取得或設定套接字的路徑 MTU 探索狀態。 預設值為 IP_PMTUDISC_NOT_SET。 針對數據流套接字, IP_PMTUDISC_NOT_SETIP_PMTUDISC_DO 會執行路徑 MTU 探索。 IP_PMTUDISC_DONT和IP_PMTUDISC_PROBE將會關閉路徑 MTU 探索。 若為 datagram 套接字,如果設定為 IP_PMTUDISC_DO ,則嘗試傳送大於路徑 MTU 的封包將會導致錯誤。 如果設定為 IP_PMTUDISC_DONT,則會根據介面 MTU 來分散封包。 如果設定為 IP_PMTUDISC_PROBE,嘗試傳送大於介面 MTU 的封包會導致錯誤。
IPV6_MULTICAST_HOPS 下載 取得或設定與套接字上的IPv6多播流量相關聯的TTL值。 將 TTL 設定為大於 255 的值是非法的。 此選項僅適用於數據報和原始套接字(套接字類型必須是SOCK_DGRAM或SOCK_RAW)。
IPV6_MULTICAST_IF 下載 取得或設定傳送 IPv6 多播流量的傳出介面。 此選項不會變更接收 IPv6 多播流量的預設介面。 此選項對於多路計算機而言很重要。 設定此選項的輸入值是主機位元組順序中所需傳出介面的 4 位元組介面索引。 GetAdaptersAddresses 函式可用來取得介面索引資訊。 如果在呼叫 setockopt 時將 optval 設定為 NULL,則會使用預設 IPv6 介面。 如果 optval 為零,則會指定接收多播的預設介面來傳送多播流量。 取得此選項時, optval 會傳回目前的預設介面索引,以主機位元組順序傳送多播 IPv6 流量。
IPV6_MULTICAST_LOOP DWORD (布爾值) 指出在套接字上傳送的多播數據會在目的地多播群組上聯結時,回應套接字接收緩衝區。 如果在呼叫 setockopt 時將 optval 設定為 1,則會啟用此選項。 如果設定為 0,則會停用選項。 此選項僅適用於數據報和原始套接字(套接字類型必須是SOCK_DGRAM或SOCK_RAW)。
IPV6_PKTINFO DWORD (布爾值) 表示封包資訊應該由 LPFN_WSARECVMSG (WSARecvMsg) 函式傳回。
IPV6_PROTECTION_LEVEL INT 啟用對指定範圍的套接字限制,例如具有相同連結本機或網站本機前置詞的位址。 提供各種限制層級和預設設定。 如需詳細資訊,請參閱IPV6_PROTECTION_LEVEL。
IPV6_RECVIF DWORD (布爾值) 指出IP堆疊是否應該填入控制緩衝區,其中包含哪些介面收到具有數據報套接字封包的詳細數據。 當此值為 true 時, LPFN_WSARECVMSG (WSARecvMsg) 函式會傳回選擇性的控制數據,其中包含封包接收給數據報套接字的介面。 此選項允許在 WSAMSG 結構中傳回封包的 IPv6 介面。 此選項僅適用於數據報和原始套接字(套接字類型必須是SOCK_DGRAM或SOCK_RAW)。
IPV6_RECVTCLASS DWORD (布爾值) 指出IP堆疊是否應該在接收的數據報上填入包含流量類別IPv6標頭欄位的訊息,以填入控制緩衝區。 當此值為 true 時, LPFN_WSARECVMSG (WSARecvMsg) 函式會傳回選擇性控制數據,其中包含所接收數據報的流量類別 IPv6 標頭域值。 此選項允許在 WSAMSG 結構中傳回所接收數據報的流量類別 IPv6 標頭欄位。 傳回的訊息類型將會IPV6_TCLASS。 將會傳回 [流量類別] 字段的所有 DSCP 和 ECN 位。 此選項僅適用於數據報套接字(套接字類型必須是SOCK_DGRAM)。
IPV6_RECVECN DWORD (布爾值) 指出IP堆疊是否應該在接收的數據報上填入包含流量類別IPv6標頭欄位之ECN位的訊息,以填入控制緩衝區。 當此值為 true 時, LPFN_WSARECVMSG (WSARecvMsg) 函式會傳回選擇性控制數據,其中包含所接收數據報之流量類別 IPv6 標頭域值的 ECN 位。 此選項允許在 WSAMSG 結構中傳回所接收數據報之流量類別 IPv6 標頭欄位的 ECN 位。 傳回的訊息類型將會IPV6_ECN。 將會傳回 [流量類別] 字段的所有 2 個 ECN 位。 此選項僅適用於數據報和原始套接字(套接字類型必須是SOCK_DGRAM或SOCK_RAW)。 針對類型安全性,您應該使用 WSAGetRecvIPEcnWSASetRecvIPEcn 函式,而不是直接使用套接字選項。
IPV6_UNICAST_HOPS 下載 取得或設定與單播流量之 IPv6 套接字相關聯的目前 TTL 值。 將 TTL 設定為大於 255 的值是非法的。
IPV6_UNICAST_IF DWORD (IF_INDEX) 取得或設定傳送 IPv6 流量的傳出介面。 此選項不會變更接收 IPv6 流量的預設介面。 此選項對於多路計算機而言很重要。 設定此選項的輸入值是主機位元組順序中所需傳出介面的 4 位元組介面索引。 GetAdaptersAddresses 函式可用來取得介面索引資訊。 如果 optval 為零,傳送 IPv6 流量的預設介面會設定為未指定。 取得此選項時, optval 會傳回目前的預設介面索引,以主機位元組順序傳送IPv6流量。
IPV6_USER_MTU 下載 取得或設定指定套接字之IP層 MTU(以位元組為單位)的上限。 如果值高於系統對 MTU 路徑的估計值(您可以藉由查詢 IPV6_MTU 套接字選項來擷取連線套接字),則選項沒有任何作用。 如果值較低,則大於這個的輸出封包會分散,或會根據IPV6_DONTFRAG的值而無法傳送。 預設值為 IP_UNSPECIFIED_USER_MTU (MAXULONG)。 針對類型安全性,您應該使用 WSAGetIPUserMtuWSASetIPUserMtu 函式,而不是直接使用套接字選項。
IPV6_V6ONLY DWORD (布爾值) 指出針對 AF_INET6 位址家族建立的通訊端是否限制僅供 IPv6 通訊使用。 針對 AF_INET6 位址家族建立的通訊端,可同時提供 IPv6 及 IPv4 通訊使用。 某些應用程式可能希望將使用限制在針對 AF_INET6 位址家族所建立的通訊端,以及僅提供 IPv6 通訊使用。 當此值為非零值時(Windows 上的預設值),針對AF_INET6位址系列建立的套接字只能用來傳送和接收 IPv6 封包。 如果這個值為零,則針對 AF_INET6 位址家族建立的通訊端,可用來傳送和接收往返 IPv6 或 IPv4 位址的封包。 請注意,必須使用 IPv4 對應位址,才能發揮與 IPv4 位址互動的能力。 Windows Vista (含) 以後版本支援這個通訊端選項。

IPPROTO_IPV6套接字選項的 Windows 支援

選項 Windows 8 Windows Server 2012 Windows 7 Windows Server 2008 Windows Vista
IP_ORIGINAL_ARRIVAL_IF x x x
IPV6_ADD_IFLIST 從 Windows 10 版本 1803 開始
IPV6_ADD_MEMBERSHIP x x x x x
IPV6_DEL_IFLIST 從 Windows 10 版本 1803 開始
IPV6_DROP_MEMBERSHIP x x x x x
IPV6_GET_IFLIST 從 Windows 10 版本 1803 開始
IPV6_HDRINCL x x x x x
IPV6_HOPLIMIT x x x x x
IPV6_IFLIST 從 Windows 10 版本 1803 開始
IPV6_JOIN_GROUP x x x x x
IPV6_LEAVE_GROUP x x x x x
IPV6_MULTICAST_HOPS x x x x x
IPV6_MULTICAST_IF x x x x x
IPV6_MULTICAST_LOOP x x x x x
IPV6_PKTINFO x x x x x
IPV6_PROTECTION_LEVEL x x x x x
IPV6_RECVIF x x x x x
IPV6_UNICAST_HOPS x x x x x
IPV6_UNICAST_IF x x x x x
IPV6_V6ONLY x x x x x

選項 Windows Server 2003 Windows XP
IP_ORIGINAL_ARRIVAL_IF
IPV6_ADD_IFLIST
IPV6_ADD_MEMBERSHIP x x
IPV6_DEL_IFLIST
IPV6_DROP_MEMBERSHIP x x
IPV6_GET_IFLIST
IPV6_HDRINCL x x
IPV6_HOPLIMIT x x
IPV6_IFLIST
IPV6_JOIN_GROUP x x
IPV6_LEAVE_GROUP x x
IPV6_MULTICAST_HOPS x x
IPV6_MULTICAST_IF x x
IPV6_MULTICAST_LOOP x x
IPV6_PKTINFO x x
IPV6_PROTECTION_LEVEL x x
IPV6_RECVIF
IPV6_UNICAST_HOPS x x
IPV6_UNICAST_IF
IPV6_V6ONLY

備註

在 Windows Vista 和更新版本的 Microsoft Windows 軟體開發工具包 (SDK) 上,頭檔的組織已變更,IPPROTO_IPV6層級定義於 Ws2def.h 頭檔中,而 Ws2def.h 頭文件會自動包含在 Winsock2.h 頭檔中。 IPPROTO_IPV6套接字選項定義於 Ws2ipdef.h 頭檔中,Ws2tcpip.h 頭檔中會自動包含不應該直接使用 Ws2def.hWs2ipdef.h 頭檔。

Windows Server 2008 R2 和 Windows 7 也支援IP_ORIGINAL_ARRIVAL_IF套接字選項。

需求

需求
頁首
Ws2def.h (包括 Winsock2.h):
Windows Server 2003 和 Windows XP 上的 Winsock2.h