opcje gniazda IPPROTO_IPV6

W poniższych tabelach opisano opcje gniazd IPPROTO_IPV6 , które mają zastosowanie do gniazd utworzonych dla rodziny adresów IPv6 (AF_INET6). 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 informacji.

Opcje

Option pobranie set Typ optval Description
IP_ORIGINAL_ARRIVAL_IF tak tak DWORD (wartość logiczna) Wskazuje, czy funkcja LPFN_WSARECVMSG (WSARecvMsg) powinna zwracać opcjonalne dane sterujące zawierające oryginalny interfejs przylotu, w którym pakiet został odebrany dla gniazd datagramu. Ta opcja jest używana z technologiami przejścia IPv6 (6to4, ISATAP i Teredo, na przykład), które zapewniają przypisywanie adresów i automatyczne tunelowanie hosta do hosta dla ruchu emisji pojedynczej IPv6, gdy hosty IPv6 muszą przechodzić przez sieci IP4, aby uzyskać dostęp do innych sieci IPv6. Pakiety IPv6 są wysyłane tunelowane jako pakiety IPv4. Ta opcja umożliwia oryginalny interfejs IPv4, w którym pakiet został odebrany do zwrócenia w strukturze WSAMSG .
IPV6_ADD_IFLIST tak DWORD (IF_INDEX) Dodaje indeks interfejsu do listy IFLIST skojarzonej z opcją IP_IFLIST .
IPV6_ADD_MEMBERSHIP tak ipv6_mreq Dołącz gniazdo do dostarczonej grupy multiemisji w określonym interfejsie. Ta opcja jest prawidłowa tylko dla datagramu i nieprzetworzonych gniazd (typ gniazda musi być SOCK_DGRAM lub SOCK_RAW).
IPV6_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.
IPV6_DROP_MEMBERSHIP tak ipv6_mreq Pozostaw podaną grupę multiemisji z danego interfejsu. Ta opcja jest prawidłowa tylko dla datagramu i nieprzetworzonych gniazd (typ gniazda musi być SOCK_DGRAM lub SOCK_RAW).
IPV6_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.
IPV6_HDRINCL tak tak DWORD(wartość logiczna) Wskazuje, że aplikacja udostępnia nagłówek IPv6 dla wszystkich danych wychodzących. Jeśli parametr optval ma wartość 1 w wywołaniu polecenia setsockopt, opcja jest włączona. Jeśli opcja jest ustawiona na 0, opcja jest wyłączona. Wartość domyślna jest wyłączona. Ta opcja jest prawidłowa tylko w przypadku gniazd datagramu i nieprzetworzonych (typ gniazda musi być SOCK_DGRAM lub SOCK_RAW). Dostawca usług TCP/IP obsługujący SOCK_RAW powinien również obsługiwać IPV6_HDRINCL.
IPV6_HOPLIMIT 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).
IPV6_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.
IPV6_JOIN_GROUP tak ipv6_mreq Tak samo jak IPV6_ADD_MEMBERSHIP
IPV6_LEAVE_GROUP tak ipv6_mreq Tak samo jak IPV6_DROP_MEMBERSHIP
IPV6_MTU tak DWORD Pobiera oszacowanie ścieżki MTU przez system. Gniazdo musi być połączone.
IPV6_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, jeśli ustawiono wartość IP_PMTUDISC_DO , próba wysłania pakietów większych niż ścieżka MTU spowoduje wystąpienie błędu. Jeśli ustawiono wartość IP_PMTUDISC_DONT, pakiety będą fragmentowane zgodnie z interfejsem MTU. Jeśli ustawiono wartość IP_PMTUDISC_PROBE, próby wysłania pakietów większych niż interfejs jednostki MTU spowodują wystąpienie błędu.
IPV6_MULTICAST_HOPS tak tak DWORD Pobiera lub ustawia wartość czasu wygaśnięcia skojarzona z ruchem multiemisji IPv6 w gniazdach. Ustawienie czasu wygaśnięcia na wartość większą niż 255 jest niedozwolone. Ta opcja jest prawidłowa tylko w przypadku gniazd datagramu i nieprzetworzonych (typ gniazda musi być SOCK_DGRAM lub SOCK_RAW).
IPV6_MULTICAST_IF tak tak DWORD Pobiera lub ustawia interfejs wychodzący na potrzeby wysyłania ruchu multiemisji IPv6. Ta opcja nie zmienia domyślnego interfejsu do odbierania ruchu multiemisji IPv6. Ta opcja jest ważna w przypadku komputerów wieloadresowych. Wartość wejściowa ustawienia tej opcji to indeks interfejsu 4-bajtowego żądanego interfejsu wychodzącego w kolejności bajtów hosta. Funkcja GetAdaptersAddresses może służyć do uzyskiwania informacji o indeksie interfejsu. Jeśli opcja optval jest ustawiona na wartość NULL w wywołaniu polecenia setsockopt, zostanie użyty domyślny interfejs IPv6. 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 IPv6 w kolejności bajtów hosta.
IPV6_MULTICAST_LOOP tak tak DWORD (wartość logiczna) Wskazuje, że dane multiemisji wysyłane do gniazda zostaną zwrócone do buforu odbieranego przez gniazda, jeśli jest również przyłączony do docelowej grupy multiemisji. 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).
IPV6_PKTINFO tak tak DWORD (wartość logiczna) Wskazuje, że informacje o pakiecie powinny być zwracane przez funkcję LPFN_WSARECVMSG (WSARecvMsg).
IPV6_PROTECTION_LEVEL tak tak INT Umożliwia ograniczenie gniazda do określonego zakresu, na przykład adresy z tym samym prefiksem lokalnym lub lokalnym łączem. Udostępnia różne poziomy ograniczeń i ustawienia domyślne. Aby uzyskać więcej informacji, zobacz IPV6_PROTECTION_LEVEL .
IPV6_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 IPv6, w którym pakiet został odebrany do zwrócenia w strukturze WSAMSG . Ta opcja jest prawidłowa tylko w przypadku gniazd datagramu i nieprzetworzonych (typ gniazda musi być SOCK_DGRAM lub SOCK_RAW).
IPV6_RECVTCLASS tak tak DWORD (wartość logiczna) Wskazuje, czy stos IP powinien wypełnić bufor kontrolny komunikatem zawierającym pole nagłówka klasy ruchu IPv6 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 klasy ruchu IPv6 odebranego datagramu. Ta opcja umożliwia zwrócenie pola nagłówka klasy ruchu IPv6 odebranego datagramu w strukturze WSAMSG . Zwrócony typ komunikatu będzie IPV6_TCLASS. Zostaną zwrócone wszystkie bity DSCP i ECN pola Klasa ruchu. Ta opcja jest prawidłowa tylko w gniazdach datagramu (typ gniazda musi być SOCK_DGRAM).
IPV6_RECVECN tak tak DWORD (wartość logiczna) Wskazuje, czy stos IP powinien wypełnić bufor kontrolny komunikatem zawierającym bity ECN pola nagłówka IPv6 klasy ruchu 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 IPv6 klasy ruchu odebranego datagramu. Ta opcja umożliwia zwrócenie bitów ECN pola nagłówka IPv6 klasy ruchu odebranego datagramu w strukturze WSAMSG . Zwrócony typ komunikatu będzie IPV6_ECN. Zostaną zwrócone wszystkie 2 bity ECN pola Klasa ruchu. 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 .
IPV6_UNICAST_HOPS tak tak DWORD Pobiera lub ustawia bieżącą wartość czasu wygaśnięcia skojarzona z gniazdem IPv6 dla ruchu emisji pojedynczej. Ustawienie czasu wygaśnięcia na wartość większą niż 255 jest niedozwolone.
IPV6_UNICAST_IF tak tak DWORD (IF_INDEX) Pobiera lub ustawia interfejs wychodzący na potrzeby wysyłania ruchu IPv6. Ta opcja nie zmienia domyślnego interfejsu do odbierania ruchu IPv6. Ta opcja jest ważna w przypadku komputerów wieloadresowych. Wartość wejściowa ustawienia tej opcji to indeks interfejsu 4-bajtowego żądanego interfejsu wychodzącego w kolejności bajtów hosta. Funkcja GetAdaptersAddresses może służyć do uzyskiwania informacji o indeksie interfejsu. Jeśli optval ma wartość zero, domyślny interfejs do wysyłania ruchu IPv6 jest ustawiony na nieokreślony. Podczas uzyskiwania tej opcji optval zwraca bieżący domyślny indeks interfejsu do wysyłania ruchu IPv6 w kolejności bajtów hosta.
IPV6_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 gniazdie, wykonując zapytanie o opcję gniazda IPV6_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 IPV6_DONTFRAG. 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 .
IPV6_V6ONLY tak tak DWORD (wartość logiczna) Wskazuje, czy gniazdo utworzone dla rodziny adresów AF_INET6 jest ograniczone tylko do komunikacji IPv6. Gniazda utworzone dla rodziny adresów AF_INET6 mogą być używane zarówno do komunikacji IPv6, jak i IPv4. Niektóre aplikacje mogą chcieć ograniczyć użycie gniazda utworzonego dla rodziny adresów AF_INET6 tylko do komunikacji IPv6. Jeśli ta wartość jest niezerowa (domyślna w Windows), gniazdo utworzone dla rodziny adresów AF_INET6 może służyć do wysyłania i odbierania tylko pakietów IPv6. Gdy ta wartość jest równa zero, można użyć gniazda utworzonego dla rodziny adresów AF_INET6 do wysyłania i odbierania pakietów do i z adresu IPv6 lub adresu IPv4. Należy pamiętać, że możliwość interakcji z adresem IPv4 wymaga użycia zamapowanych adresów IPv4. Ta opcja gniazda jest obsługiwana w Windows Vista lub nowszym.

obsługa Windows opcji gniazd IPPROTO_IPV6

Option Windows 8 Windows Server 2012 Windows 7 Windows Server 2008 Windows Vista
IP_ORIGINAL_ARRIVAL_IF tak tak tak
IPV6_ADD_IFLIST Począwszy od Windows 10, wersja 1803
IPV6_ADD_MEMBERSHIP tak tak tak tak tak
IPV6_DEL_IFLIST Począwszy od Windows 10, wersja 1803
IPV6_DROP_MEMBERSHIP tak tak tak tak tak
IPV6_GET_IFLIST Począwszy od Windows 10, wersja 1803
IPV6_HDRINCL tak tak tak tak tak
IPV6_HOPLIMIT tak tak tak tak tak
IPV6_IFLIST Począwszy od Windows 10, wersja 1803
IPV6_JOIN_GROUP tak tak tak tak tak
IPV6_LEAVE_GROUP tak tak tak tak tak
IPV6_MULTICAST_HOPS tak tak tak tak tak
IPV6_MULTICAST_IF tak tak tak tak tak
IPV6_MULTICAST_LOOP tak tak tak tak tak
IPV6_PKTINFO tak tak tak tak tak
IPV6_PROTECTION_LEVEL tak tak tak tak tak
IPV6_RECVIF tak tak tak tak tak
IPV6_UNICAST_HOPS tak tak tak tak tak
IPV6_UNICAST_IF tak tak tak tak tak
IPV6_V6ONLY tak tak tak tak tak

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

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_IPV6 poziom jest zdefiniowany w Ws2def.h pliku nagłówka, który jest automatycznie dołączany do pliku nagłówka Winsock2.h. Opcje gniazda IPPROTO_IPV6 są zdefiniowane w pliku nagłówka Ws2ipdef.h , który jest automatycznie dołączany do pliku nagłówka Ws2tcpip.h . Pliki nagłówkowe Ws2def.h i Ws2ipdef.h nigdy nie powinny być używane bezpośrednio.

Opcja gniazda IP_ORIGINAL_ARRIVAL_IF jest obsługiwana w Windows Server 2008 R2, a także w Windows 7.

Wymagania

Wymóg Wartość
Nagłówek
Ws2def.h (w tym Winsock2.h);
Winsock2.h w Windows Server 2003 i Windows XP