opcje gniazd IPPROTO_IP

W poniższych tabelach opisano opcje gniazd IPPROTO_IP , które mają zastosowanie do gniazd utworzonych dla rodziny adresów IPv4 (AF_INET). Aby uzyskać więcej informacji na temat pobierania i ustawiania opcji gniazda, zobacz strony referencyjne funkcji getsockopt i setsockopt .

Aby wyliczyć protokoły i wykryć obsługiwane właściwości dla każdego zainstalowanego protokołu, użyj funkcji WSAEnumProtocols, WSCEnumProtocols lub WSCEnumProtocols32 .

Niektóre opcje gniazd wymagają więcej wyjaśnień niż te tabele mogą być przekazywane; takie opcje zawierają linki do dodatkowych stron.

Opcje

Option Get Ustawienie Typ optval Description
IP_ADD_IFLIST tak DWORD (IF_INDEX) Dodaje indeks interfejsu do listy IFLIST skojarzonej z opcją IP_IFLIST .
IP_ADD_MEMBERSHIP tak ip_mreq Dołącz gniazdo do dostarczonej grupy multiemisji w określonym interfejsie.
IP_ADD_SOURCE_MEMBERSHIP tak ip_mreq_source Dołącz dostarczoną grupę multiemisji w danym interfejsie i zaakceptuj dane pochodzące z podanego adresu źródłowego.
IP_BLOCK_SOURCE tak ip_mreq_source Usuwa dane źródło jako nadawcę do dostarczonej grupy multiemisji i interfejsu.
IP_DEL_IFLIST tak DWORD (IF_INDEX) Usuwa indeks interfejsu z listy IFLIST skojarzonej z opcją IP_IFLIST . Wpisy mogą być usuwane tylko przez aplikację, dlatego należy pamiętać, że wpisy mogą przestarzałe po usunięciu interfejsu.
IP_DONTFRAGMENT tak tak DWORD (wartość logiczna) Wskazuje, że dane nie powinny być fragmentowane niezależnie od lokalnej jednostki MTU. Prawidłowe tylko dla protokołów zorientowanych na komunikaty. Microsoft dostawcy TCP/IP przestrzegają tej opcji dla protokołu UDP i protokołu ICMP.
IP_DROP_MEMBERSHIP tak ip_mreq Pozostawia określoną grupę multiemisji z określonego interfejsu. Dostawcy usług muszą obsługiwać tę opcję, gdy jest obsługiwana multiemisji. Obsługa jest wskazana w strukturze WSAPROTOCOL_INFO zwracanej przez wywołanie funkcji WSAEnumProtocols z następującymi elementami: XPI_SUPPORT_MULTIPOINT=1, XP1_MULTIPOINT_CONTROL_PLANE=0, XP1_MULTIPOINT_DATA_PLANE=0.
IP_DROP_SOURCE_MEMBERSHIP tak ip_mreq_source Pomiń członkostwo w danej grupie multiemisji, interfejsie i adresie źródłowym.
IP_GET_IFLIST tak DWORD[] (IF_INDEX[]) Pobiera bieżącą listę IFLIST skojarzona z opcją IP_IFLIST . Zwraca błąd, jeśli IP_IFLIST nie jest włączona.
IP_HDRINCL tak tak DWORD (wartość logiczna) Po ustawieniu wartości TRUE wskazuje, że aplikacja udostępnia nagłówek IP. Dotyczy tylko gniazd SOCK_RAW. Dostawca usługi TCP/IP może ustawić pole identyfikatora, jeśli wartość podana przez aplikację wynosi zero. Opcja IP_HDRINCL jest stosowana tylko do typu protokołu SOCK_RAW. Dostawca usług TCP/IP obsługujący SOCK_RAW powinien również obsługiwać IP_HDRINCL.
IP_IFLIST tak tak DWORD (wartość logiczna) Pobiera lub ustawia stan IP_IFLIST gniazda. Jeśli ta opcja ma wartość true, odbiór datagramu jest ograniczony do interfejsów, które znajdują się w IFLIST. Datagramy odebrane w innych interfejsach są ignorowane. Funkcja IFLIST zaczyna być pusta. Użyj IP_ADD_IFLIST i IP_DEL_IFLIST , aby edytować iflist.
IP_MTU tak DWORD Pobiera oszacowanie ścieżki MTU przez system. Gniazdo musi być połączone.
IP_MTU_DISCOVER tak tak DWORD (PMTUD_STATE) Pobiera lub ustawia stan odnajdywania jednostki MTU ścieżki dla gniazda. Wartość domyślna to IP_PMTUDISC_NOT_SET. W przypadku gniazd strumienia IP_PMTUDISC_NOT_SET i IP_PMTUDISC_DO będą wykonywać odnajdywanie ścieżki jednostki MTU. IP_PMTUDISC_DONT i IP_PMTUDISC_PROBE wyłączy odnajdywanie ścieżki jednostki MTU. W przypadku gniazd datagramu IP_PMTUDISC_DO wymusi, że wszystkie pakiety wychodzące mają ustawiony bit df, a próba wysłania pakietów większych niż ścieżka MTU spowoduje wystąpienie błędu. IP_PMTUDISC_DONT wymusi, aby wszystkie pakiety wychodzące miały nie ustawioną bit df, a pakiety będą fragmentowane zgodnie z interfejsem MTU. IP_PMTUDISC_PROBE wymusi, że wszystkie pakiety wychodzące mają ustawiony bit df, a próba wysłania pakietów większych niż interfejs MTU spowoduje wystąpienie błędu.
IP_MULTICAST_IF tak tak DWORD Pobiera lub ustawia interfejs wychodzący na potrzeby wysyłania ruchu multiemisji IPv4. Ta opcja nie zmienia domyślnego interfejsu do odbierania ruchu multiemisji IPv4. Wartość wejściowa ustawienia tej opcji to 4-bajtowy adres IPv4 w kolejności bajtów sieciowych. Ten parametr DWORD może być również indeksem interfejsu w kolejności bajtów sieciowych. Każdy adres IP w bloku 0.x.x.x (pierwszy oktet 0) z wyjątkiem adresu IPv4 0.0.0.0 jest traktowany jako indeks interfejsu. Indeks interfejsu jest 24-bitową liczbą, a blok adresów IPv4 0.0.0.0/8 nie jest używany (ten zakres jest zarezerwowany). Indeks interfejsu może służyć do określania domyślnego interfejsu dla ruchu multiemisji dla protokołu IPv4. Jeśli optval ma wartość zero, domyślny interfejs do odbierania multiemisji jest określony do wysyłania ruchu multiemisji. Podczas uzyskiwania tej opcji optval zwraca bieżący domyślny indeks interfejsu do wysyłania ruchu multiemisji IPv4 w kolejności bajtów hosta.
IP_MULTICAST_LOOP tak tak DWORD (wartość logiczna) W przypadku gniazda przyłączonego do co najmniej jednej grupy multiemisji ta steruje tym, czy otrzyma kopię pakietów wychodzących wysyłanych do tych grup multiemisji za pośrednictwem wybranego interfejsu multiemisji. Domyślnie IP_MULTICAST_LOOP jest włączona (wartość 1/TRUE), więc gniazda będą otrzymywać pasujące pakiety multiemisji wysyłane przez bieżącą maszynę. Wyłączenie tej opcji (przez ustawienie jej na wartość 0/FALSE) oznacza, że to gniazdo nie będzie odbierać multiemisji wysyłanych z komputera lokalnego, nawet jeśli gniazdo jest otwarte w interfejsie sprzężenia zwrotnego.

Nie jest to zgodne z wersją POSIX IP_MULTICAST_LOOP — opcja musi być ustawiona na gniazdo odbierające; podczas gdy opcja POSIX musi być ustawiona na gniazdo wysyłające.
IP_MULTICAST_TTL tak tak DWORD Ustawia/pobiera wartość czasu wygaśnięcia skojarzona z ruchem multiemisji IP w gniazdach.
IP_OPTIONS tak tak Char Określa opcje adresów IP, które mają być wstawione do pakietów wychodzących. Ustawienie nowych opcji zastępuje wszystkie wcześniej określone opcje. Ustawienie opcji na zero powoduje usunięcie wszystkich wcześniej określonych opcji. IP_OPTIONS nie jest wymagana obsługa; aby sprawdzić, czy IP_OPTIONS jest obsługiwana, użyj polecenia getockopt , aby uzyskać bieżące opcje. Jeśli program getsockopt zakończy się niepowodzeniem, IP_OPTIONS nie jest obsługiwana.
IP_ORIGINAL_ARRIVAL_IF tak tak DWORD (wartość logiczna) Wskazuje, czy funkcja LPFN_WSARECVMSG (WSARecvMsg) powinna zwracać opcjonalne dane sterujące zawierające interfejs przylotu, w którym pakiet został odebrany dla gniazd datagramu. Ta opcja umożliwia interfejs IPv4, w którym pakiet został odebrany do zwrócenia w strukturze WSAMSG . Ta opcja jest prawidłowa tylko dla datagramu i nieprzetworzonych gniazd (typ gniazda musi być SOCK_DGRAM lub SOCK_RAW).
IP_PKTINFO tak tak DWORD Wskazuje, że informacje o pakiecie powinny być zwracane przez funkcję WSARecvMsg .
IP_RECEIVE_BROADCAST tak tak DWORD (wartość logiczna) Umożliwia lub blokuje odbieranie emisji.
IP_RECVIF tak tak DWORD (wartość logiczna) Wskazuje, czy stos IP powinien wypełnić bufor kontrolny szczegółami dotyczącymi interfejsu odbieranego przez pakiet z gniazdem datagramu. Gdy ta wartość ma wartość true, funkcja LPFN_WSARECVMSG (WSARecvMsg) zwróci opcjonalne dane sterujące zawierające interfejs, w którym pakiet został odebrany dla gniazd datagramu. Ta opcja umożliwia interfejs IPv4, w którym pakiet został odebrany do zwrócenia w strukturze WSAMSG . Ta opcja jest prawidłowa tylko dla datagramu i nieprzetworzonych gniazd (typ gniazda musi być SOCK_DGRAM lub SOCK_RAW).
IP_RECVTOS tak tak DWORD (wartość logiczna) Wskazuje, czy stos IP powinien wypełnić bufor kontrolny komunikatem zawierającym pole nagłówka IPv4 typu usługi (TOS) na odebranym datagramie. Gdy ta wartość ma wartość true, funkcja LPFN_WSARECVMSG (WSARecvMsg) zwróci opcjonalne dane sterujące zawierające wartość pola nagłówka IPv4 toS odebranego datagramu. Ta opcja umożliwia zwrócenie pola nagłówka IPv4 toS odebranego datagramu w strukturze WSAMSG . Zwrócony typ komunikatu będzie IP_TOS. Zostaną zwrócone wszystkie bity DSCP i ECN pola TOS. Ta opcja jest prawidłowa tylko w gniazdach datagramu (typ gniazda musi być SOCK_DGRAM).
IP_RECVECN tak tak DWORD (wartość logiczna) Wskazuje, czy stos IP powinien wypełnić bufor kontrolny komunikatem zawierającym bity ECN pola nagłówka IPv4 typu usługi (TOS) na odebranym datagramie. Gdy ta wartość ma wartość true, funkcja LPFN_WSARECVMSG (WSARecvMsg) zwróci opcjonalne dane sterujące zawierające bity ECN wartości pola nagłówka IPv4 odebranego datagramu. Ta opcja umożliwia zwrócenie bitów ECN pola nagłówka IPv4 toS odebranego datagramu w strukturze WSAMSG . Zwrócony typ komunikatu będzie IP_ECN. Zostaną zwrócone wszystkie 2 bity ECN pola TOS. Ta opcja jest prawidłowa tylko dla datagramu i nieprzetworzonych gniazd (typ gniazda musi być SOCK_DGRAM lub SOCK_RAW). Funkcje WSAGetRecvIPEcn i WSASetRecvIPEcn są przestarzałe, ponieważ nie obsługują prawidłowo gniazd dwustosowych. Użyj tej opcji gniazda bezpośrednio. W przypadku gniazda dwustosowego, które jest niezwiązane lub powiązane z adresem wieloznacznymi, ustaw zarówno IP_RECVECN ( poziom IPPROTO_IP), jak i IPV6_RECVECN (poziom IPPROTO_IPV6). Jeśli gniazdo jest powiązane z określonym adresem IPv6, ma zastosowanie tylko IPV6_RECVECN . Jeśli gniazdo jest powiązane z adresem IPv4 mapowanym na protokół IPv6, ma zastosowanie tylko IP_RECVECN .
IP_RECVTTL tak tak DWORD (wartość logiczna) Wskazuje, że informacje o przeskoku (TTL) powinny być zwracane w funkcji LPFN_WSARECVMSG (WSARecvMsg). Jeśli opcja jest ustawiona na wartość 1 w wywołaniu polecenia setsockopt, opcja jest włączona. W przypadku ustawienia wartości 0 opcja jest wyłączona. Ta opcja jest prawidłowa tylko w przypadku gniazd datagramu i nieprzetworzonych (typ gniazda musi być SOCK_DGRAM lub SOCK_RAW).
IP_TOS tak tak DWORD (wartość logiczna) Nie używaj. Ustawienia typu usługa (TOS) powinny być ustawiane tylko przy użyciu interfejsu API jakości usług. Aby uzyskać więcej informacji, zobacz Sekcję Usługi zróżnicowane w sekcji Dotyczącej jakości usług zestawu SDK platformy.
IP_TTL tak tak DWORD (wartość logiczna) Zmienia wartość domyślną ustawioną przez dostawcę usługi TCP/IP w polu TTL nagłówka IP w wychodzących datagramach. IP_TTL nie jest wymagana obsługa; Aby sprawdzić, czy IP_TTL jest obsługiwana, użyj polecenia getockopt , aby uzyskać bieżące opcje. Jeśli program getsockopt zakończy się niepowodzeniem, IP_TTL nie jest obsługiwana.
IP_UNBLOCK_SOURCE tak ip_mreq_source Dodaje dane źródło jako nadawcę do dostarczonej grupy multiemisji i interfejsu.
IP_UNICAST_IF tak tak DWORD (IF_INDEX) Pobiera lub ustawia interfejs wychodzący na potrzeby wysyłania ruchu IPv4. Ta opcja nie zmienia domyślnego interfejsu odbierania ruchu IPv4. Ta opcja jest ważna w przypadku komputerów wieloadresowych. Wartość wejściowa ustawienia tej opcji to 4-bajtowy adres IPv4 w kolejności bajtów sieciowych. Ten parametr DWORD musi być indeksem interfejsu w kolejności bajtów sieciowych. Każdy adres IP w bloku 0.x.x.x (pierwszy oktet 0) z wyjątkiem adresu IPv4 0.0.0.0 jest traktowany jako indeks interfejsu. Indeks interfejsu jest 24-bitową liczbą, a blok adresów IPv4 0.0.0.0/8 nie jest używany (ten zakres jest zarezerwowany). Indeks interfejsu może służyć do określania domyślnego interfejsu wysyłania ruchu dla protokołu IPv4. Funkcja GetAdaptersAddresses może służyć do uzyskiwania informacji o indeksie interfejsu. Jeśli optval ma wartość zero, domyślny interfejs wysyłania ruchu jest ustawiony na nieokreślony. Podczas uzyskiwania tej opcji optval zwraca bieżący domyślny indeks interfejsu do wysyłania ruchu IPv4 w kolejności bajtów hosta.
IP_USER_MTU tak tak DWORD Pobiera lub ustawia górną granicę w warstwie IP MTU (w bajtach) dla danego gniazda. Jeśli wartość jest wyższa niż szacowana przez system ścieżka MTU (którą można pobrać w połączonym gniazdach, wykonując zapytanie o opcję gniazda IP_MTU ), opcja nie ma żadnego wpływu. Jeśli wartość jest niższa, pakiety wychodzące większe niż te zostaną pofragmentowane lub nie będą wysyłane, w zależności od wartości IP_DONTFRAGMENT. Wartość domyślna to IP_UNSPECIFIED_USER_MTU (MAXULONG). Funkcje WSAGetIPUserMtu i WSASetIPUserMtu są przestarzałe, ponieważ nie obsługują prawidłowo gniazd dwustosowych. Użyj tej opcji gniazda bezpośrednio. W przypadku gniazda z dwoma stosami, które jest niezwiązane lub powiązane z adresem wieloznacznymi, ustaw zarówno IP_USER_MTU ( poziom IPPROTO_IP) i IPV6_USER_MTU (poziom IPPROTO_IPV6). Jeśli gniazdo jest powiązane z określonym adresem IPv6, ma zastosowanie tylko IPV6_USER_MTU . Jeśli gniazdo jest powiązane z adresem IPv4 mapowanym na protokół IPv6, ma zastosowanie tylko IP_USER_MTU .
IP_WFP_REDIRECT_CONTEXT tak tak WSACMSGHDR z danymi kontrolnymi Typ danych pomocniczych gniazda datagramu (cmsg_type) wskazujący kontekst przekierowania gniazda UDP używanego przez tryb użytkownika Windows usługi przekierowania platformy filtrowania (WFP).
IP_WFP_REDIRECT_RECORDS tak tak WSACMSGHDR z danymi kontrolnymi Typ danych pomocniczych gniazda datagramu (cmsg_type) wskazujący rekord przekierowania gniazda UDP używanego przez tryb użytkownika Windows usługi przekierowania platformy filtrowania (WFP).

obsługa Windows opcji IP_PROTO

Option Windows 10 Windows 8 Windows Server 2012 Windows 7 Windows Server 2008 Windows Vista
IP_ADD_IFLIST Począwszy od Windows 10, wersja 1803
IP_ADD_MEMBERSHIP tak tak tak tak tak tak
IP_ADD_SOURCE_MEMBERSHIP tak tak tak tak tak tak
IP_BLOCK_SOURCE tak tak tak tak tak tak
IP_DEL_IFLIST Począwszy od Windows 10, wersja 1803
IP_DONTFRAGMENT tak tak tak tak tak tak
IP_DROP_MEMBERSHIP tak tak tak tak tak tak
IP_DROP_SOURCE_MEMBERSHIP tak tak tak tak tak tak
IP_GET_IFLIST Począwszy od Windows 10, wersja 1803
IP_HDRINCL tak tak tak tak tak tak
IP_IFLIST Począwszy od Windows 10, wersja 1803
IP_MULTICAST_IF tak tak tak tak tak tak
IP_MULTICAST_LOOP tak tak tak tak tak tak
IP_MULTICAST_TTL tak tak tak tak tak tak
IP_OPTIONS tak tak tak tak tak tak
IP_ORIGINAL_ARRIVAL_IF tak tak tak tak
IP_PKTINFO tak tak tak tak tak tak
IP_RECEIVE_BROADCAST tak tak tak tak tak tak
IP_RECVIF Począwszy od Windows 10, wersja 1703 tak tak tak tak tak
IP_RECVTTL tak
IP_TOS tak tak tak
IP_TTL tak tak tak tak tak tak
IP_UNBLOCK_SOURCE tak tak tak tak tak tak
IP_UNICAST_IF tak tak tak tak tak tak
IP_WFP_REDIRECT_CONTEXT tak tak tak
IP_WFP_REDIRECT_RECORDS tak tak tak

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

Remarks

W Microsoft Windows Software Development Kit (SDK) wydanym dla Windows Vista i nowszych organizacja plików nagłówków została zmieniona i IPPROTO_IP poziom jest zdefiniowany w Ws2def.h pliku nagłówka, który jest automatycznie dołączany do pliku nagłówka Winsock2.h. Niektóre opcje gniazda IPPROTO_IP są zdefiniowane w pliku nagłówka Ws2ipdef.h , który jest automatycznie dołączany przez plik nagłówka Ws2tcpip.h . Pozostałe opcje gniazda IPPROTO_IP są zdefiniowane w pliku nagłówka Wsipv6ok.h , który jest automatycznie dołączany przez plik nagłówka Winsock2.h . Pliki nagłówkowe Ws2def.h, Ws2ipdef.h i Wsipv6ok.h nigdy nie powinny być używane bezpośrednio.

W zestawie SDK platformy wydanym dla Windows Server 2003 i Windows XP IPPROTO_IP0 poziom jest definiowany na poziomie Winsock2.h. Niektóre opcje gniazda IPPROTO_IP są zdefiniowane w pliku nagłówkowym Ws2tcpip.h . Pozostałe opcje gniazda IPPROTO_IP są zdefiniowane w pliku nagłówka Wsipv6ok.h , który jest automatycznie dołączany przez plik nagłówka Winsock2.h . Plik nagłówka Wsipv6ok.h nigdy nie powinien być używany bezpośrednio.

Wymagania

Wymóg Wartość
Nagłówek
Ws2def.h (w tym Winsock2.h);
Ws2ipdef.h (w tym Ws2tcpip.h);
Wsipv6ok.h (w tym Winsock2.h)