IPPROTO_IP 通訊端選項

下表描述 IPPROTO_IP 通訊端選項,這些選項適用于針對 IPv4 位址系列所建立的通訊端 (AF_INET) 。 如需取得和設定通訊端選項的詳細資訊,請參閱 getsockoptsetockopt 函式參考頁面。

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

某些通訊端選項需要比這些資料表所能傳達的更多說明;這類選項包含其他頁面的連結。

選項。

選項 Get 集合 Optval 類型 描述
IP_ADD_IFLIST DWORD (IF_INDEX) 將介面索引新增至與 IP_IFLIST 選項相關聯的 IFLIST。
IP_ADD_MEMBERSHIP ip_mreq 將通訊端加入指定介面上提供的多播群組。
IP_ADD_SOURCE_MEMBERSHIP ip_mreq_source 在指定的介面上聯結提供的多播群組,並接受來自所提供來源位址的資料來源。
IP_BLOCK_SOURCE ip_mreq_source 將指定的來源移除為所提供多播群組和介面的傳送者。
IP_DEL_IFLIST DWORD (IF_INDEX) 從與 IP_IFLIST 選項相關聯的 IFLIST 中移除介面索引。 專案只能由應用程式移除,因此請注意,一旦移除介面之後,專案可能會過時。
IP_DONTFRAGMENT DWORD (布林值) 表示不論本機 MTU 為何,都不應該分散資料。 僅適用于訊息導向通訊協定。 Microsoft TCP/IP 提供者會遵守 UDP 和 ICMP 的此選項。
IP_DROP_MEMBERSHIP ip_mreq 從指定的介面離開指定的多播群組。 當支援多播時,服務提供者必須支援此選項。 WSAEnumProtocols函式呼叫傳回的 WSAPROTOCOL_INFO結構中會指出支援:XPI_SUPPORT_MULTIPOINT=1、XP1_MULTIPOINT_CONTROL_PLANE=0、XP1_MULTIPOINT_DATA_PLANE=0。
IP_DROP_SOURCE_MEMBERSHIP ip_mreq_source 將成員資格卸載至指定的多播群組、介面和來源位址。
IP_GET_IFLIST DWORD[] (IF_INDEX[]) 取得與 IP_IFLIST 選項相關聯的目前 IFLIST。 如果未啟用 IP_IFLIST, 則傳回錯誤。
IP_HDRINCL DWORD (布林值) 當設定為 TRUE時,表示應用程式會提供 IP 標頭。 僅適用于SOCK_RAW通訊端。 如果應用程式所提供的值為零,TCP/IP 服務提供者可能會設定識別碼欄位。 IP_HDRINCL選項只會套用至通訊協定SOCK_RAW類型。 支援SOCK_RAW的 TCP/IP 服務提供者也應該支援IP_HDRINCL。
IP_IFLIST DWORD (布林值) 取得或設定通訊端IP_IFLIST狀態。 當此選項設定為 true 時,Datagram 接收會限制為 IFLIST 中的介面。 任何其他介面上收到的資料包都會被忽略。 IFLIST 會啟動空白。 使用 IP_ADD_IFLISTIP_DEL_IFLIST 來編輯 IFLIST。
IP_MTU DWORD 取得系統路徑 MTU 的估計值。 通訊端必須連接。
IP_MTU_DISCOVER DWORD (PMTUD_STATE) 取得或設定通訊端的路徑 MTU 探索狀態。 預設值為 IP_PMTUDISC_NOT_SET。 對於資料流程通訊端, IP_PMTUDISC_NOT_SETIP_PMTUDISC_DO 會執行路徑 MTU 探索。 IP_PMTUDISC_DONTIP_PMTUDISC_PROBE 將會關閉路徑 MTU 探索。 對於資料包通訊端, IP_PMTUDISC_DO 會強制所有傳出封包設定 DF 位,並嘗試傳送大於路徑 MTU 的封包,將會導致錯誤。 IP_PMTUDISC_DONT 會強制所有傳出封包未設定 DF 位,而且會根據介面 MTU 來分散封包。 IP_PMTUDISC_PROBE 會強制所有傳出封包設定 DF 位,而嘗試傳送大於介面 MTU 的封包將會導致錯誤。
IP_MULTICAST_IF DWORD 取得或設定傳送 IPv4 多播流量的傳出介面。 此選項不會變更接收 IPv4 多播流量的預設介面。 設定此選項的輸入值是以網路位元組順序排列的 4 位元組 IPv4 位址。 這個 DWORD 參數也可以是網路位元組順序中的介面索引。 除了 IPv4 位址 0.0.0.0.0 以外,0.x.x 區塊中的任何 IP 位址都會被視為介面索引 (第一個) 八位。 介面索引是 24 位的數位,而且不會使用 0.0.0.0/8 IPv4 位址區塊, (保留此範圍) 。 介面索引可用來指定 IPv4 多播流量的預設介面。 如果 optval 為零,則會指定接收多播的預設介面來傳送多播流量。 取得此選項時, optval 會傳回目前的預設介面索引,以主機位元組順序傳送多播 IPv4 流量。
IP_MULTICAST_LOOP DWORD (布林值) 對於聯結至一或多個多播群組的通訊端,這會控制它是否會透過選取的多播介面接收傳送至這些多播群組的 傳出 封包複本。 根據預設, IP_MULTICAST_LOOP (值為 1/TRUE) ,因此通訊端 會收到 目前電腦所傳送的相符多播封包。 將 (此選項設定為 0/FALSE) 表示此通訊端不會接收從本機電腦傳送的多播,即使通訊端在回送介面上開啟,仍會停用此選項。

這與 POSIX 版本的IP_MULTICAST_LOOP不相容—必須在接收通訊端上設定選項;而 POSIX 選項必須在傳送通訊端上設定。
IP_MULTICAST_TTL DWORD 設定/取得與通訊端上 IP 多播流量相關聯的 TTL 值。
IP_OPTIONS char [] 指定要插入傳出封包的 IP 選項。 設定新選項會覆寫所有先前指定的選項。 將 optval 設定為零會移除所有先前指定的選項。 不需要IP_OPTIONS支援;若要檢查是否支援IP_OPTIONS,請使用 getockopt 來取得目前的選項。 如果 getsockopt 失敗,則不支援IP_OPTIONS。
IP_ORIGINAL_ARRIVAL_IF DWORD (布林值) 指出 LPFN_WSARECVMSG (WSARecvMsg) 函式是否應該傳回選擇性的控制資料,其中包含接收資料包通訊端封包的抵達介面。 此選項允許在 WSAMSG 結構中傳回封包的 IPv4 介面。 只有資料包和原始通訊端 (通訊端類型必須SOCK_DGRAM或SOCK_RAW) ,此選項才有效。
IP_PKTINFO DWORD 指出 WSARecvMsg 函式應該傳回封包資訊。
IP_RECEIVE_BROADCAST DWORD (布林值) 允許或封鎖廣播接收。
IP_RECVIF DWORD (布林值) 指出 IP 堆疊是否應該填入控制緩衝區,其中包含哪些介面收到具有資料包通訊端封包的詳細資料。 當此值為 true 時, LPFN_WSARECVMSG (WSARecvMsg) 函式會傳回選擇性的控制資料,其中包含接收資料包通訊端封包的介面。 此選項允許在 WSAMSG 結構中傳回封包的 IPv4 介面。 只有資料包和原始通訊端 (通訊端類型必須SOCK_DGRAM或SOCK_RAW) ,此選項才有效。
IP_RECVTOS DWORD (布林值) 指出 IP 堆疊是否應該在接收的資料包上填入包含服務類型 (TOS) IPv4 標頭欄位的訊息來填入控制緩衝區。 當此值為 true 時, LPFN_WSARECVMSG (WSARecvMsg) 函式會傳回選擇性的控制資料,其中包含所接收資料包的 TOS IPv4 標頭域值。 此選項允許 在 WSAMSG 結構中傳回所接收資料包的 TOS IPv4 標頭欄位。 傳回的訊息類型將會IP_TOS。 將會傳回 TOS 欄位的所有 DSCP 和 ECN 位。 只有在通訊端類型必須SOCK_DGRAM) ,此選項才對資料包通訊端有效 (。
IP_RECVTTL DWORD (布林值) 指出LPFN_WSARECVMSG (WSARecvMsg) 函式中應該傳回躍點 (TTL) 資訊。 如果在對setockopt的呼叫上將optval設定為1,則會啟用此選項。 如果設定為 0,則會停用選項。 此選項僅適用于資料包和原始通訊端, (通訊端類型必須SOCK_DGRAM或SOCK_RAW) 。
IP_TOS DWORD (布林值) 請勿使用。 服務 (TOS) 設定的類型應該只使用服務品質 API 來設定。 如需詳細資訊,請參閱平臺 SDK 的服務品質一節中的 區別服務
IP_TTL DWORD (布林值) 在傳出資料包中 IP 標頭的 TTL 欄位中,變更 TCP/IP 服務提供者所設定的預設值。 不需要IP_TTL支援;若要檢查是否支援IP_TTL,請使用 getockopt 來取得目前的選項。 如果 getsockopt 失敗,則不支援IP_TTL。
IP_UNBLOCK_SOURCE ip_mreq_source 將指定的來源新增為傳送者至提供的多播群組和介面。
IP_UNICAST_IF DWORD (IF_INDEX) 取得或設定傳送 IPv4 流量的傳出介面。 此選項不會變更接收 IPv4 流量的預設介面。 此選項對於多路電腦很重要。 設定此選項的輸入值是以網路位元組順序排列的 4 位元組 IPv4 位址。 這個 DWORD 參數必須是網路位元組順序的介面索引。 除了 IPv4 位址 0.0.0.0.0 以外,0.x.x 區塊中的任何 IP 位址都會被視為介面索引 (第一個) 八位。 介面索引是 24 位的數位,而且不會使用 0.0.0.0/8 IPv4 位址區塊, (保留此範圍) 。 介面索引可用來指定傳送 IPv4 流量的預設介面。 GetAdaptersAddresses函式可用來取得介面索引資訊。 如果 optval 為零,則傳送流量的預設介面會設定為未指定。 取得此選項時, optval 會傳回目前的預設介面索引,以主機位元組順序傳送 IPv4 流量。
IP_USER_MTU DWORD 取得或設定指定通訊端的 IP 層 MTU (位元組) 上限。 如果值高於系統路徑 MTU (的估計值,您可以藉由查詢 IP_MTU 通訊端選項) 來擷取該路徑 MTU,則選項不會有任何作用。 如果值較低,則大於這個 的輸出封包將會分散,或無法傳送,視 IP_DONTFRAGMENT的值而定。 預設值為 maxULONG) (IP_UNSPECIFIED_USER_MTU。 針對型別安全,您應該使用 WSAGetIPUserMtuWSASetIPUserMtu 函式,而不是直接使用通訊端選項。
IP_WFP_REDIRECT_CONTEXT WSACMSGHDR 與控制資料 資料包通訊端輔助資料類型 (cmsg_type) ,指出使用者模式 Windows 篩選平台 () 重新導向服務所使用的 UDP 通訊端重新導向內容。
IP_WFP_REDIRECT_RECORDS WSACMSGHDR 與控制資料 資料包通訊端輔助資料類型 (cmsg_type) ,用來指出使用者模式 Windows 篩選平台 (一個) 重新導向服務所使用的 UDP 通訊端重新導向記錄。

IP_PROTO選項的 Windows 支援

選項 Windows 10 Windows 8 Windows Server 2012 Windows 7 Windows Server 2008 Windows Vista
IP_ADD_IFLIST 從 Windows 10 1803 版開始
IP_ADD_MEMBERSHIP x x x x x x
IP_ADD_SOURCE_MEMBERSHIP x x x x x x
IP_BLOCK_SOURCE x x x x x x
IP_DEL_IFLIST 從 Windows 10 1803 版開始
IP_DONTFRAGMENT x x x x x x
IP_DROP_MEMBERSHIP x x x x x x
IP_DROP_SOURCE_MEMBERSHIP x x x x x x
IP_GET_IFLIST 從 Windows 10 1803 版開始
IP_HDRINCL x x x x x x
IP_IFLIST 從 Windows 10 1803 版開始
IP_MULTICAST_IF x x x x x x
IP_MULTICAST_LOOP x x x x x x
IP_MULTICAST_TTL x x x x x x
IP_OPTIONS x x x x x x
IP_ORIGINAL_ARRIVAL_IF x x x x
IP_PKTINFO x x x x x x
IP_RECEIVE_BROADCAST x x x x x x
IP_RECVIF 從 Windows 10 1703 版開始 x x x x x
IP_RECVTTL x
IP_TOS x x x
IP_TTL x x x x x x
IP_UNBLOCK_SOURCE x x x x x x
IP_UNICAST_IF x x x x x x
IP_WFP_REDIRECT_CONTEXT x x x
IP_WFP_REDIRECT_RECORDS x x x

選項 Windows Server 2003 Windows XP
IP_ADD_IFLIST
IP_ADD_MEMBERSHIP x x
IP_ADD_SOURCE_MEMBERSHIP x x
IP_BLOCK_SOURCE x x
IP_DEL_IFLIST
IP_DONTFRAGMENT x x
IP_DROP_MEMBERSHIP x x
IP_DROP_SOURCE_MEMBERSHIP x x
IP_GET_IFLIST
IP_HDRINCL x x
IP_IFLIST
IP_MULTICAST_IF x x
IP_MULTICAST_LOOP x x
IP_MULTICAST_TTL x x
IP_OPTIONS x x
IP_ORIGINAL_ARRIVAL_IF
IP_PKTINFO x x
IP_RECEIVE_BROADCAST x x
IP_RECVIF
IP_RECVTTL
IP_TOS
IP_TTL x x
IP_UNBLOCK_SOURCE x x
IP_UNICAST_IF
IP_WFP_REDIRECT_CONTEXT
IP_WFP_REDIRECT_RECORDS

備註

在針對 Windows Vista 和更新版本發行的 Microsoft Windows 軟體發展工具組 (SDK) 中,標頭檔的組織已變更, IPPROTO_IP 層級定義在 Winsock2.h 標頭檔中自動包含在 Winsock2.h 標頭檔中。 Ws2ipdef.h標頭檔會自動包含在Ws2tcpip.h標頭檔中的一些IPPROTO_IP通訊端選項。 其餘 IPPROTO_IP 通訊端選項定義于 Wsipv6ok.h 標頭檔中, Winsock2.h 標頭檔會自動包含。 Ws2def.hWs2ipdef.hWsipv6ok.h標頭檔絕對不應該直接使用。

在針對 Windows Server 2003 和 Windows XP 發行的平臺 SDK 中, IPPROTO_IP 層級定義于 Winsock2.h 標頭檔中。 Ws2tcpip.h標頭檔中定義了一些IPPROTO_IP通訊端選項。 其餘 IPPROTO_IP 通訊端選項定義于 Wsipv6ok.h 標頭檔中, Winsock2.h 標頭檔會自動包含。 Wsipv6ok.h標頭檔不應該直接使用。

規格需求

需求
標頭
Ws2def.h (包含 Winsock2.h) ;
Ws2ipdef.h (包含 Ws2tcpip.h) ;
Wsipv6ok.h (包含 Winsock2.h)