Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować się zalogować lub zmienić katalog.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
W tej sekcji opisano kontrolki wejścia/wyjścia gniazda Winsock dla różnych wersji systemów operacyjnych Windows. Użyj funkcji WSAIoctl lub WSPIoctl , aby wydać IOCTL winsock, aby kontrolować tryb gniazda, protokołu transportowego lub podsystemu komunikacji.
Niektóre listy IOCT protokołu Winsock wymagają więcej wyjaśnień niż ta tabela może przekazać; takie opcje zawierają linki do dodatkowych tematów.
Istnieje możliwość przyjęcia schematu kodowania, który zachowuje obecnie zdefiniowane kody operacji ioctlsocket przy jednoczesnym zapewnieniu wygodnego sposobu partycjonowania przestrzeni identyfikatora opcode w tyle, jak parametr dwIoControlCode jest teraz jednostką 32-bitową. Parametr dwIoControlCode został skompilowany w celu zapewnienia niezależności protokołu i dostawcy podczas dodawania nowych kodów kontroli przy zachowaniu zgodności z poprzednimi wersjami przy użyciu kodów kontrolek Windows Sockets 1.1 i Unix. Parametr dwIoControlCode ma następujący formularz.
| Ja | O | V | T | Rodzina dostawców/adresów | Kod |
|---|---|---|---|---|---|
| 3 | 3 | 2 | 2 2 | 2 2 2 2 2 2 2 1 1 1 1 | 1 1 1 1 1 1 |
| 1 | 0 | 9 | 8 7 | 6 5 4 3 2 1 0 9 8 7 6 | 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 |
Uwaga / Notatka
Bity w parametrze dwIoControlCode wyświetlanym w tabeli muszą być odczytywane w pionie od góry do dołu według kolumny. Dlatego najwięcej bitów po lewej stronie to bit 31, następny bit jest bitem 30, a prawy bit jest bitem 0.
Ustawiono, czy bufor wejściowy jest prawidłowy dla kodu, tak jak w przypadku IOC_IN.
O jest ustawiany, jeśli bufor wyjściowy jest prawidłowy dla kodu, podobnie jak w przypadku IOC_OUT. Kody sterujące używające zarówno wejściowych, jak i wyjściowych ustawiają operacje we/wy.
Maszyna wirtualna jest ustawiona, jeśli nie ma parametrów dla kodu, tak jak w przypadku IOC_VOID.
T jest 2-bitową ilością, która definiuje typ IOCTL. Zdefiniowane są następujące wartości:
0 IOCTL to standardowy kod IOCTL systemu Unix, podobnie jak FIONREAD i FIONBIO.
1 IOCTL to ogólny kod IOCTL windows Sockets 2. Nowe kody IOCTL zdefiniowane dla gniazd systemu Windows 2 będą miały T == 1.
2 IOCTL dotyczy tylko określonej rodziny adresów.
3 IOCTL dotyczy tylko dostawcy określonego dostawcy, podobnie jak w przypadku IOC_VENDOR. Ten typ umożliwia firmom przypisanie numeru dostawcy wyświetlanego w parametrze Rodziny dostawców/adresów . Następnie dostawca może zdefiniować nowe listy IOCTL specyficzne dla tego dostawcy bez konieczności rejestrowania IOCTL przy użyciu magazynu rozliczeń, zapewniając tym samym elastyczność dostawcy i prywatność.
Rodzina dostawców/adresów Ilość 11-bitowa, która definiuje dostawcę, który jest właścicielem kodu (jeśli T == 3) lub zawiera rodzinę adresów, do której stosuje się kod (jeśli T == 2). Jeśli jest to kod IOCTL systemu Unix (T == 0), ten parametr ma taką samą wartość jak kod w systemie Unix. Jeśli jest to ogólny windows Sockets 2 IOCTL (T == 1), ten parametr może służyć jako rozszerzenie parametru kodu, aby podać dodatkowe wartości kodu.
Kod Ilość 16-bitowa zawierająca określony kod IOCTL dla operacji.
Kody IOCTL systemu Unix
Obsługiwane są następujące kody IOCTL systemu Unix (polecenia).
FIONBIO
Włącz lub wyłącz tryb nieblokowania w gniazdach s. Parametr lpvInBuffer wskazuje na niepodpisany długi (QoS), który jest niezerowy, jeśli tryb nieblokowania ma być włączony i zero, jeśli ma być wyłączony. Po utworzeniu gniazda działa w trybie blokowania (czyli tryb nieblokujący jest wyłączony). Jest to zgodne z gniazdami BSD.
Procedury WSAAsyncSelect lub WSAEventSelect automatycznie ustawiają gniazdo na tryb nieblokowania. Jeśli WSAAsyncSelect lub WSAEventSelect został wystawiony na gniazdie, każda próba użycia biblioteki WSAIoctl w celu ustawienia gniazda z powrotem do trybu blokowania zakończy się niepowodzeniem z usługą WSAEINVAL. Aby ustawić gniazdo z powrotem w tryb blokowania, aplikacja musi najpierw wyłączyć WSAAsyncSelect, wywołując polecenie WSAAsyncSelect z parametrem lEvent równym zero lub wyłączyć WSAEventSelect, wywołując polecenie WSAEventSelect z parametrem lNetworkEvents równym zero.
FIONREAD
Określ ilość danych, które mogą być odczytywane niepodziealnie z gniazd s. Parametr lpvOutBuffer wskazuje na niepodpisany długo , w którym WSAIoctl przechowuje wynik.
Jeśli gniazdo przekazane w parametrze s jest zorientowane na strumień (na przykład wpisz SOCK_STREAM), funkcja FIONREAD zwraca łączną ilość danych, które można odczytać w jednej operacji odbierania; Jest to zwykle takie samo, jak łączna ilość danych w kolejce do gniazda (ponieważ strumień danych jest zorientowany bajtowo, nie jest to gwarantowane).
Jeśli gniazdo przekazane w parametrze s jest zorientowane na komunikat (na przykład wpisz SOCK_DGRAM), funkcja FIONREAD zwraca łączną liczbę bajtów dostępnych do odczytu, a nie rozmiar pierwszego datagramu (komunikatu) w kolejce do gniazda.
SIOCATMARK
Ustal, czy wszystkie dane OOB zostały odczytane. Dotyczy to tylko gniazda w stylu strumienia (na przykład wpisz SOCK_STREAM), które zostało skonfigurowane do wbudowanego odbioru dowolnych danych OOB (SO_OOBINLINE). Jeśli żadne dane OOB nie oczekują na odczyt, operacja zwraca wartość TRUE. W przeciwnym razie zwraca wartość FALSE, a następna operacja odbierania wykonywana na gniazdach pobierze niektóre lub wszystkie dane poprzedzające znacznik; aplikacja powinna używać operacji SIOCATMARK , aby określić, czy istnieją jakieś szczątki. Jeśli istnieją jakiekolwiek normalne dane poprzedzające pilne (poza pasmem), zostaną odebrane w kolejności. (Należy pamiętać, że operacje odzyskiwania nigdy nie będą mieszać operacji OOB i normalnych danych w tym samym wywołaniu). lpvOutBuffer wskazuje wartość BOOL, w której WSAIoctl przechowuje wynik.
Polecenia windows Sockets 2
Obsługiwane są następujące polecenia windows Sockets 2.
SIO_ACQUIRE_PORT_RESERVATION (ustawienie opcode: I, T==3)
Zażądaj rezerwacji środowiska uruchomieniowego dla bloku portów TCP lub UDP. W przypadku rezerwacji portów środowiska uruchomieniowego pula portów wymaga użycia rezerwacji z procesu, na którym udzielono gniazda rezerwacji. Rezerwacje portów środowiska uruchomieniowego trwają tylko tak długo, jak okres istnienia gniazda, na którym wywoływano SIO_ACQUIRE_PORT_RESERVATION IOCTL. Natomiast trwałe rezerwacje portów utworzone przy użyciu funkcji CreatePersistentTcpPortReservation lub CreatePersistentUdpPortReservation mogą być używane przez dowolny proces z możliwością uzyskania trwałych rezerwacji.
Aby uzyskać bardziej szczegółowe informacje, zobacz dokumentację SIO_ACQUIRE_PORT_RESERVATION .
SIO_ACQUIRE_PORT_RESERVATION jest obsługiwany w systemie Windows Vista i nowszych wersjach systemu operacyjnego.
SIO_ADDRESS_LIST_CHANGE (ustawienie opcode: V, T==1)
Aby otrzymywać powiadomienia o zmianach na liście lokalnych adresów transportowych rodziny protokołów gniazda, z którą aplikacja może powiązać. Po zakończeniu niniejszej IOCTL nie zostaną podane żadne informacje wyjściowe; ukończenie wskazuje jedynie, że lista dostępnych adresów lokalnych została zmieniona i powinna być ponownie odpytywane za pośrednictwem SIO_ADDRESS_LIST_QUERY.
Zakłada się,że (chociaż nie jest to wymagane), aplikacja używa nakładających się operacji we/wy, aby otrzymywać powiadomienia o zmianie przez ukończenie żądania SIO_ADDRESS_LIST_CHANGE . Alternatywnie, jeśli SIO_ADDRESS_LIST_CHANGE IOCTL jest wystawiany na gniazdo nieblokacyjne i bez nakładających się parametrów (lpOverlapped/ lpCompletionRoutine są ustawione na wartość NULL), zostanie ukończona natychmiast z błędem WSAEWOULDBLOCK. Następnie aplikacja może czekać na zdarzenia zmiany listy adresów za pomocą wywołania WSAEventSelect lub WSAAsyncSelect z FD_ADDRESS_LIST_CHANGE bitem ustawionym w maski bitów zdarzeń sieciowych.
SIO_ADDRESS_LIST_QUERY (ustawienie kodu opcode: O, T==1)
Uzyskuje listę lokalnych adresów transportowych rodziny protokołów gniazda, z którą aplikacja może powiązać. Lista adresów różni się w zależności od rodziny adresów, a niektóre adresy są wykluczone z listy.
Uwaga / Notatka
W środowiskach Plug-n-Play systemu Windows adresy można dodawać i usuwać dynamicznie. W związku z tym aplikacje nie mogą polegać na informacjach zwracanych przez SIO_ADDRESS_LIST_QUERY do trwałego. Aplikacje mogą rejestrować się w celu otrzymywania powiadomień o zmianie adresu za pośrednictwem SIO_ADDRESS_LIST_CHANGE IOCTL, która zapewnia powiadomienia za pośrednictwem nakładających się operacji we/wy lub zdarzenia FD_ADDRESS_LIST_CHANGE. Poniższa sekwencja akcji może służyć do zagwarantowania, że aplikacja zawsze ma aktualne informacje o liście adresów:
- Problem SIO_ADDRESS_LIST_CHANGE IOCTL
- Problem SIO_ADDRESS_LIST_QUERY IOCTL
- Za każdym razem, gdy SIO_ADDRESS_LIST_CHANGE IOCTL powiadamia o zmianie listy adresów (przez nakładające się operacje we/wy lub przez sygnalizowanie zdarzenia FD_ADDRESS_LIST_CHANGE), cała sekwencja akcji powinna być powtarzana.
Aby uzyskać bardziej szczegółowe informacje, zobacz dokumentację SIO_ADDRESS_LIST_QUERY . SIO_ADDRESS_LIST_QUERY jest obsługiwana w systemie Windows 2000 lub nowszym.
SIO_APPLY_TRANSPORT_SETTING (ustawienie kodu opcode: I, T==3)
Stosuje ustawienie transportu do gniazda. Zastosowane ustawienie transportu jest oparte na TRANSPORT_SETTING_ID przekazanym w parametrze lpvInBuffer .
Jedynym ustawieniem transportu, które obecnie definiuje, jest REAL_TIME_NOTIFICATION_CAPABILITY możliwości w gniazdie TCP.
Jeśli przekazana TRANSPORT_SETTING_ID ma element członkowski Guid ustawiony na REAL_TIME_NOTIFICATION_CAPABILITY, jest to żądanie zastosowania ustawień powiadomień w czasie rzeczywistym dla gniazda TCP używanego z kontrolką ControlChannelTrigger w celu odbierania powiadomień sieciowych w tle w aplikacji Ze Sklepu Windows.
Aby uzyskać bardziej szczegółowe informacje, zobacz dokumentację SIO_APPLY_TRANSPORT_SETTING . SIO_APPLY_TRANSPORT_SETTING jest obsługiwana w systemach Windows 8, Windows Server 2012 i nowszych.
SIO_ASSOCIATE_HANDLE (ustawienie opcode: I, T==1)
Skojarz to gniazdo z określonym uchwytem interfejsu towarzyszącego. Bufor wejściowy zawiera wartość całkowitą odpowiadającą stałej manifestu dla interfejsu towarzyszącego (na przykład TH_NETDEV i TH_TAPI).), a następnie wartość, która jest uchwytem określonego interfejsu towarzyszącego, wraz z innymi wymaganymi informacjami. Aby uzyskać szczegółowe informacje dotyczące konkretnego interfejsu towarzyszącego, zapoznaj się z odpowiednią sekcją w załącznikach Winsock . Całkowity rozmiar jest odzwierciedlany w długości buforu wejściowego. Nie jest wymagany bufor wyjściowy. Kod błędu WSAENOPROTOOPT jest wskazywany dla dostawców usług, którzy nie obsługują tej listy IOCTL. Dojście skojarzone z tą biblioteką IOCTL można pobrać przy użyciu SIO_TRANSLATE_HANDLE.
Interfejs towarzyszący może być używany, na przykład jeśli określony dostawca udostępnia (1) wiele dodatkowych kontroli nad zachowaniem gniazda i (2) kontrolki są wystarczająco specyficzne dla dostawcy, że nie są mapowane na istniejące funkcje windows Socket lub te, które mogą być zdefiniowane w przyszłości. Zaleca się, aby model obiektów składowych (COM) był używany zamiast tego IOCTL do odnajdywania i śledzenia innych interfejsów, które mogą być obsługiwane przez gniazdo. Ta funkcja IOCTL jest obecna w przypadku (odwrotnej) zgodności z systemami, w których com jest niedostępny lub nie może być używany z jakiegoś innego powodu.
SIO_ASSOCIATE_PORT_RESERVATION (ustawienie opcode: I, T==3)
Skojarz gniazdo z trwałą rezerwacją środowiska uruchomieniowego dla bloku portów TCP lub UDP zidentyfikowanych przez token rezerwacji portu. Należy wydać SIO_ASSOCIATE_PORT_RESERVATION IOCTL przed ograniczeniem gniazda. Jeśli i gdy gniazdo jest powiązane, port przypisany do niego zostanie wybrany z rezerwacji portów zidentyfikowanej przez dany token. Jeśli nie ma dostępnych portów z określonej rezerwacji, wywołanie funkcji powiązania zakończy się niepowodzeniem.
Aby uzyskać bardziej szczegółowe informacje, zobacz dokumentację SIO_ASSOCIATE_PORT_RESERVATION .
SIO_ASSOCIATE_PORT_RESERVATION jest obsługiwany w systemie Windows Vista i nowszych wersjach systemu operacyjnego.
SIO_BASE_HANDLE (ustawienie kodu opcode: O, T==1)
Pobiera dojście podstawowego dostawcy usług dla danego gniazda. Zwracana wartość jest gniazdem.
Dostawca usług warstwowych nigdy nie przechwytuje tej biblioteki IOCTL, ponieważ wartość zwracana musi być dojściem gniazda od podstawowego dostawcy usług.
Jeśli bufor wyjściowy nie jest wystarczająco duży dla uchwytu gniazda ( cbOutBuffer jest mniejszy niż rozmiar gniazda) lub lpvOutBuffer parametr jest wskaźnikiem NULL , SOCKET_ERROR jest zwracany w wyniku tego IOCTL i WSAGetLastError zwraca wartość WSAEFAULT.
SIO_BASE_HANDLE jest definiowana w pliku nagłówkowym Mswsock.h i jest obsługiwana w systemie Windows Vista i nowszych wersjach.
SIO_BSP_HANDLE (ustawienie kodu opcode: O, T==1)
Pobiera podstawowy uchwyt dostawcy usług dla gniazda używanego przez funkcję WSASendMsg . Zwracana wartość jest gniazdem.
Ten element Ioctl jest używany przez dostawcę usług warstwowych w celu zapewnienia, że dostawca przechwytuje funkcję WSASendMsg .
Jeśli bufor wyjściowy nie jest wystarczająco duży dla uchwytu gniazda ( cbOutBuffer jest mniejszy niż rozmiar gniazda) lub lpvOutBuffer parametr jest wskaźnikiem NULL , SOCKET_ERROR jest zwracany w wyniku tego IOCTL i WSAGetLastError zwraca wartość WSAEFAULT.
SIO_BSP_HANDLE jest zdefiniowany w pliku nagłówkowym Mswsock.h i obsługiwany w systemie Windows Vista i nowszych wersjach.
SIO_BSP_HANDLE_SELECT (ustawienie opcode: O, T==1)
Pobiera dojście podstawowego dostawcy usług dla gniazda używanego przez funkcję select . Zwracana wartość jest gniazdem.
Ten element Ioctl jest używany przez dostawcę usług warstwowych w celu zapewnienia, że dostawca przechwytuje funkcję select .
Jeśli bufor wyjściowy nie jest wystarczająco duży dla uchwytu gniazda ( cbOutBuffer jest mniejszy niż rozmiar gniazda) lub lpvOutBuffer parametr jest wskaźnikiem NULL , SOCKET_ERROR jest zwracany w wyniku tego IOCTL i WSAGetLastError zwraca wartość WSAEFAULT.
SIO_BSP_HANDLE_SELECT jest definiowana w pliku nagłówkowym Mswsock.h i obsługiwana w systemie Windows Vista i nowszych wersjach.
SIO_BSP_HANDLE_POLL (ustawienie opcode: O, T==1)
Pobiera podstawowy uchwyt dostawcy usług dla gniazda używanego przez funkcję WSAPoll . Parametr lpOverlapped musi być wskaźnikiem NULL . Zwracana wartość jest gniazdem.
Ten element Ioctl jest używany przez dostawcę usług warstwowych w celu zapewnienia, że dostawca przechwytuje funkcję WSAPoll .
Jeśli bufor wyjściowy nie jest wystarczająco duży dla uchwytu gniazda ( cbOutBuffer jest mniejszy niż rozmiar gniazda), parametr lpvOutBuffer jest wskaźnikiem NULL lub parametr lpOverlapped nie jest wskaźnikiem NULL , SOCKET_ERROR jest zwracany w wyniku tego IOCTL i WSAGetLastError zwraca wartość WSAEFAULT.
SIO_BSP_HANDLE_POLL jest zdefiniowany w pliku nagłówkowym Mswsock.h i obsługiwany w systemie Windows Vista i nowszych wersjach.
SIO_CHK_QOS (ustawienie kodu opcode: I, O, T==3)
Pobiera informacje o cechach ruchu QoS. W fazie przejściowej systemu wysyłania między konfiguracją przepływu a otrzymaniem komunikatu RESV (zobacz How the RSVP Service Invokes TC (Jak usługa RSVP wywołuje TC , aby uzyskać więcej informacji na temat fazy przejściowej), ruch skojarzony z przepływem RSVP jest kształtowany na podstawie typu usługi (BEST EFFORT, KONTROLOWANE OBCIĄŻENIE lub GWARANTOWANE). Aby uzyskać więcej informacji, zobacz Using SIO_CHK_QOS (Korzystanie z SIO_CHK_QOS ) w sekcji Quality of Service (Jakość usługi ) zestawu SDK platformy.
SIO_CPU_AFFINITY (ustawienie opcode: I, T==3)
Umożliwia udostępnianie portów i odbieranie równoległych wskazówek. Gdy aplikacja używa tej opcji gniazda do kojarzenia gniazd z różnymi procesorami, a następnie wiąże gniazda z tym samym adresem, sygnały odbioru będą dystrybuowane między gniazda na podstawie skrótu RSS (Receive Side Scaling). Ustawienia RSS nie zmieniają się, więc każdy przepływ (lokalny punkt końcowy, zdalna para punktów końcowych) będzie zawsze wskazywany na tym samym procesorze. W rezultacie wszystkie pakiety należące do danego przepływu będą wskazywane na to samo gniazdo. To IOCTL musi być wywoływane przed powiązaniem, w przeciwnym razie zostanie zwrócony WSAEINVAL. Bufor wejściowy jest indeksem procesora (opartym na 0) typu USHORT. IOCTL jest niezgodna z SO_REUSEADDR i SO_REUSE_MULTICASTPORT. Obsługiwane tylko w przypadku gniazd UDP.
Uwaga / Notatka
Jeśli używasz wersji 10.0.19041.0 (Windows 10, wersja 2004) zestawu Windows SDK, użyj wartości 0x98000015 zamiast nazwy SIO_CPU_AFFINITY.
SIO_ENABLE_CIRCULAR_QUEUEING (ustawienie opcode: V, T==1)
Wskazuje bazowemu dostawcy usługi zorientowanej na komunikaty, że nowo przybyły komunikat nigdy nie powinien zostać porzucony z powodu przepełnienia kolejki buforu. Zamiast tego należy wyeliminować najstarszy komunikat w kolejce, aby pomieścić nowo przybyły komunikat. Nie są wymagane żadne wejściowe i wyjściowe. Należy pamiętać, że ta biblioteka IOCTL jest prawidłowa tylko w przypadku gniazd skojarzonych z zawodnymi protokołami zorientowanymi na komunikaty. Kod błędu WSAENOPROTOOPT jest wskazywany dla dostawców usług, którzy nie obsługują tej listy IOCTL.
SIO_FIND_ROUTE (ustawienie opcode: O, T==1)
Po wystawieniu ten obiekt IOCTL żąda, aby trasa do adresu zdalnego określona jako sockaddr w buforze wejściowym została odnaleziona. Jeśli adres już istnieje w lokalnej pamięci podręcznej, jego wpis zostanie unieważniony. W przypadku protokołu IPX Firmy Novell to wywołanie inicjuje wywołanie IPX GetLocalTarget (GLT), które wysyła zapytanie do sieci dla danego adresu zdalnego.
SIO_FLUSH (ustawienie opcode: V, T==1)
Odrzuca bieżącą zawartość kolejki wysyłania skojarzonej z tym gniazdem. Nie są wymagane żadne wejściowe i wyjściowe. Kod błędu WSAENOPROTOOPT jest wskazywany dla dostawców usług, którzy nie obsługują tej listy IOCTL.
SIO_GET_BROADCAST_ADDRESS (ustawienie kodu opcode: O, T==1)
To IOCTL wypełnia bufor wyjściowy strukturą sockaddr zawierającą odpowiedni adres emisji do użycia z sendto/ WSASendTo. Ta biblioteka IOCTL nie jest obsługiwana w przypadku gniazd IPv6 i zwraca kod błędu WSAENOPROTOOPT .
SIO_GET_EXTENSION_FUNCTION_POINTER (ustawienie opcode: O, I, T==1)
Pobierz wskaźnik do określonej funkcji rozszerzenia obsługiwanej przez skojarzonego dostawcę usług. Bufor wejściowy zawiera globalnie unikatowy identyfikator (GUID), którego wartość identyfikuje kwestię rozszerzenia. Wskaźnik do żądanej funkcji jest zwracany w buforze wyjściowym. Identyfikatory funkcji rozszerzenia są ustanawiane przez dostawców usług i powinny być zawarte w dokumentacji dostawcy, która opisuje możliwości i semantyka funkcji rozszerzenia.
Wartości identyfikatora GUID dla funkcji rozszerzeń obsługiwanych przez dostawcę usługi TCP/IP systemu Windows są zdefiniowane w pliku nagłówkowym Mswsock.h . Możliwa wartość tych identyfikatorów GUID jest następująca:
| Termin | Opis |
|---|---|
|
WSAID_ACCEPTEX |
Funkcja rozszerzenia AcceptEx . |
|
WSAID_CONNECTEX |
Funkcja rozszerzenia ConnectEx . |
|
WSAID_DISCONNECTEX |
Funkcja rozszerzenia DisconnectEx . |
|
WSAID_GETACCEPTEXSOCKADDRS |
Funkcja rozszerzenia GetAcceptExSockaddrs . |
|
WSAID_TRANSMITFILE |
Funkcja rozszerzenia TransmitFile . |
|
WSAID_TRANSMITPACKETS |
Funkcja rozszerzenia TransmitPackets . |
|
WSAID_WSARECVMSG |
Funkcja rozszerzenia LPFN_WSARECVMSG (WSARecvMsg). |
|
WSAID_WSASENDMSG |
Funkcja rozszerzenia WSASendMsg . |
SIO_GET_GROUP_QOS (ustawienie opcode: O, I, T==1)
Zarezerwowane do użytku w przyszłości z gniazdami.
Pobierz strukturę QOS skojarzona z grupą gniazd, do której należy to gniazdo. Bufor wejściowy jest opcjonalny. Niektóre protokoły (na przykład RSVP) umożliwiają używanie buforu wejściowego w celu zakwalifikowania jakości żądania obsługi. Struktura QOS zostanie skopiowana do buforu wyjściowego. Jeśli to gniazdo nie należy do odpowiedniej grupy gniazd, elementy członkowskie SendingFlowspec i ReceivingFlowspec zwracanej struktury QOS są ustawione na wartość NULL. Kod błędu WSAENOPROTOOPT jest wskazywany dla dostawców usług, którzy nie obsługują jakości usług.
SIO_GET_INTERFACE_LIST (ustawienie opcode: O, T==0)
Zwraca listę skonfigurowanych interfejsów IP i ich parametrów jako tablicę struktur INTERFACE_INFO .
Uwaga / Notatka
Obsługa tego polecenia jest obowiązkowa dla dostawców usług TCP/IP zgodnych z Windows Sockets 2.
LpvOutBuffer parametr wskazuje bufor, w którym mają być przechowywane informacje o interfejsach jako tablica struktur INTERFACE_INFO dla adresów IP emisji pojedynczej w interfejsach. Parametr cbOutBuffer określa długość buforu wyjściowego. Liczba zwracanych interfejsów (liczba struktur zwróconych w buforze wskazywanym przez parametr lpvOutBuffer ) może być określana na podstawie rzeczywistej długości buforu wyjściowego zwróconego w parametrze lpcbBytesReturned .
Jeśli funkcja WSAIoctl jest wywoływana z SIO_GET_INTERFACE_LIST , a element członkowski poziomu parametru gniazda nie jest zdefiniowany jako IPPROTO_IP, zwracana jest funkcja WSAEINVAL . Wywołanie funkcji WSAIoctl z SIO_GET_INTERFACE_LIST zwraca wartość WSAEFAULT , jeśli parametr cbOutBuffer określający długość buforu wyjściowego jest zbyt mały ro odbiera listę skonfigurowanych interfejsów.
SIO_GET_INTERFACE_LIST jest obsługiwana w systemach Windows Me/98 i Windows NT 4.0 z dodatkiem SP4 lub nowszym.
SIO_GET_INTERFACE_LIST_EX (ustawienie kodu opcode: O, T==0)
Zarezerwowane do użytku w przyszłości z gniazdami.
Zwraca listę skonfigurowanych interfejsów IP i ich parametrów jako tablicę struktur INTERFACE_INFO_EX .
LpvOutBuffer parametr wskazuje bufor, w którym mają być przechowywane informacje o interfejsach jako tablica struktur INTERFACE_INFO_EX dla adresów IP emisji pojedynczej w interfejsie. Parametr cbOutBuffer określa długość buforu wyjściowego. Liczba zwracanych interfejsów (liczba struktur zwróconych w elpvOutBuffer) można określić na podstawie rzeczywistej długości buforu wyjściowego zwróconego w parametrze lpcbBytesReturned .
SIO_GET_INTERFACE_LIST_EX nie jest obecnie obsługiwana w systemie Windows.
SIO_GET_QOS (ustawienie kodu opcode: O, T==1)
Zarezerwowane do użytku w przyszłości z gniazdami. Pobierz strukturę QOS skojarzona z gniazdem. Bufor wejściowy jest opcjonalny. Niektóre protokoły (na przykład RSVP) umożliwiają używanie buforu wejściowego w celu zakwalifikowania jakości żądania obsługi. Struktura QOS zostanie skopiowana do buforu wyjściowego. Bufor wyjściowy musi mieć wystarczająco duży rozmiar, aby mógł zawierać pełną strukturę QOS . Kod błędu WSAENOPROTOOPT jest wskazywany dla dostawców usług, którzy nie obsługują jakości usług.
Nadawca może nie wywoływać SIO_GET_QOS , dopóki gniazdo nie zostanie podłączone.
Odbiornik może wywołać SIO_GET_QOS zaraz po jego powiązaniu.
SIO_GET_TX_TIMESTAMP
Gniazdo IOCTL używane do pobierania sygnatur czasowych dla pakietów przesyłanych (TX). Prawidłowe tylko dla gniazd datagramu.
Kod kontrolny SIO_GET_TX_TIMESTAMP usuwa znacznik czasu transmisji z kolejki znacznika czasu transmisji gniazda. Włącz najpierw odbiór sygnatury czasowej przy użyciu SIO_TIMESTAMPING gniazda IOCTL. Następnie pobierz znaczniki czasu tx według identyfikatora, wywołując funkcję WSAIoctl (lub WSPIoctl) z następującymi parametrami.
W przypadku SIO_GET_TX_TIMESTAMP dane wejściowe są identyfikatorem sygnatury czasowej UINT32 , a dane wyjściowe są wartością znacznika czasu UINT64 . W przypadku powodzenia sygnatura czasowa tx jest dostępna i zwracana. Jeśli nie są dostępne żadne znaczniki czasu transmisji, funkcja WSAGetLastError zwraca element WSAEWOULDBLOCK.
Uwaga / Notatka
Znaczniki czasu TX nie są obsługiwane w przypadku wysyłania zesłanego za pośrednictwem UDP_SEND_MSG_SIZE.
Zobacz również znaczniki czasu winsock.
SIO_IDEAL_SEND_BACKLOG_CHANGE (ustawienie kodu opcode: V, T==0)
Powiadamia aplikację, gdy idealna wartość listy prac wysyłania (ISB) zmieni się dla bazowego połączenia.
Podczas wysyłania danych za pośrednictwem połączenia TCP przy użyciu gniazd systemu Windows ważne jest, aby zachować wystarczającą ilość danych zaległych (wysłanych, ale nie potwierdzonych) w protokole TCP w celu osiągnięcia najwyższej przepływności. Idealna wartość dla ilości danych zaległych w celu uzyskania najlepszej przepływności dla połączenia TCP jest nazywana idealnym rozmiarem listy prac wysyłania (ISB). Wartość ISB jest funkcją produktu opóźnienia przepustowości połączenia TCP i anonsowanego okna odbioru odbiorcy (a częściowo ilości przeciążenia w sieci).
Wartość ISB na połączenie jest dostępna z implementacji protokołu TCP w systemie Windows Server 2008, Windows Vista z dodatkiem SP1 i nowszymi wersjami systemu operacyjnego. SIO_IDEAL_SEND_BACKLOG_CHANGE IOCTL może służyć przez aplikację do otrzymywania powiadomień, gdy wartość ISB zmienia się dynamicznie dla połączenia.
Aby uzyskać bardziej szczegółowe informacje, zobacz dokumentację SIO_IDEAL_SEND_BACKLOG_CHANGE .
SIO_IDEAL_SEND_BACKLOG_CHANGE jest obsługiwana w systemie Windows Server 2008, Windows Vista z dodatkiem SP1 i nowszymi wersjami systemu operacyjnego.
SIO_IDEAL_SEND_BACKLOG_QUERY (ustawienie kodu opcode: O, T==0)
Pobiera idealną wartość listy prac wysyłania (ISB) dla połączenia bazowego.
Podczas wysyłania danych za pośrednictwem połączenia TCP przy użyciu gniazd systemu Windows ważne jest, aby zachować wystarczającą ilość danych zaległych (wysłanych, ale nie potwierdzonych) w protokole TCP w celu osiągnięcia najwyższej przepływności. Idealna wartość dla ilości danych zaległych w celu uzyskania najlepszej przepływności dla połączenia TCP jest nazywana idealnym rozmiarem listy prac wysyłania (ISB). Wartość ISB jest funkcją produktu opóźnienia przepustowości połączenia TCP i anonsowanego okna odbioru odbiorcy (a częściowo ilości przeciążenia w sieci).
Wartość ISB na połączenie jest dostępna z implementacji protokołu TCP w systemie Windows Server 2008 lub nowszym. SIO_IDEAL_SEND_BACKLOG_QUERY IOCTL może użyć przez aplikację do wykonywania zapytań dotyczących wartości ISB dla połączenia.
Aby uzyskać bardziej szczegółowe informacje, zobacz dokumentację SIO_IDEAL_SEND_BACKLOG_QUERY .
SIO_IDEAL_SEND_BACKLOG_QUERY jest obsługiwana w systemie Windows Server 2008, Windows Vista z dodatkiem SP1 i nowszymi wersjami systemu operacyjnego.
SIO_KEEPALIVE_VALS (ustawienie opcode: I, T==3)
Włącza lub wyłącza ustawienie na połączenie opcji utrzymywania aktywności protokołu TCP, która określa limit czasu i interwał utrzymania aktywności protokołu TCP. Aby uzyskać więcej informacji na temat opcji keep-alive, zobacz sekcję 4.2.3.6 w temacie Wymagania dotyczące hostów internetowych — warstwy komunikacji określone w specyfikacji RFC 1122 dostępne w witrynie internetowej IETF. (Ten zasób może być dostępny tylko w języku angielskim).
SIO_KEEPALIVE_VALS można użyć do włączania lub wyłączania sond utrzymania aktywności oraz ustawiania limitu czasu i interwału zachowania aktywności. Limit czasu utrzymania aktywności określa limit czasu (w milisekundach) bez działania do momentu wysłania pierwszego pakietu keep-alive. Interwał utrzymania aktywności określa interwał (w milisekundach) między kolejnymi pakietami utrzymania aktywności wysyłanymi, jeśli nie otrzymano potwierdzenia.
Opcja SO_KEEPALIVE , która jest jedną z opcji gniazda SOL_SOCKET, może również służyć do włączania lub wyłączania zachowania aktywności PROTOKOŁU TCP w połączeniu, a także wykonywania zapytań o bieżący stan tej opcji. Aby zapytać, czy funkcja TCP keep-alive jest włączona w gniazdach, można wywołać funkcję getsockopt przy użyciu opcji SO_KEEPALIVE . Aby włączyć lub wyłączyć funkcję tcp keep-alive, funkcję setsockopt można wywołać za pomocą opcji SO_KEEPALIVE . Jeśli funkcja utrzymania aktywności protokołu TCP jest włączona przy użyciu SO_KEEPALIVE, domyślne ustawienia protokołu TCP są używane dla limitu czasu i interwału zachowania aktywności, chyba że te wartości zostały zmienione przy użyciu SIO_KEEPALIVE_VALS.
Aby uzyskać bardziej szczegółowe informacje, zobacz dokumentację SIO_KEEPALIVE_VALS . SIO_KEEPALIVE_VALS jest obsługiwana w systemie Windows 2000 lub nowszym.
SIO_LOOPBACK_FAST_PATH (ustawienie opcode: I, T==3)
Konfiguruje gniazdo TCP pod kątem mniejszych opóźnień i szybszych operacji w interfejsie sprzężenia zwrotnego. To IOCTL żąda, aby stos TCP/IP używał specjalnej szybkiej ścieżki do operacji sprzężenia zwrotnego w tym gniazdie. SIO_LOOPBACK_FAST_PATH IOCTL można używać tylko z gniazdami TCP. To IOCTL musi być używane po obu stronach sesji sprzężenia zwrotnego. Szybka ścieżka sprzężenia zwrotnego PROTOKOŁU TCP jest obsługiwana przy użyciu interfejsu sprzężenia zwrotnego IPv4 lub IPv6. Domyślnie SIO_LOOPBACK_FAST_PATH jest wyłączona.
Aby uzyskać bardziej szczegółowe informacje, zobacz dokumentację SIO_LOOPBACK_FAST_PATH . SIO_LOOPBACK_FAST_PATH jest obsługiwana w systemach Windows 8, Windows Server 2012 i nowszych.
SIO_MULTIPOINT_LOOPBACK (ustawienie kodu opcode: V, T==1)
Określa, czy dane wysyłane przez aplikację na komputerze lokalnym (niekoniecznie przez to samo gniazdo) w sesji multiemisji będą odbierane przez gniazdo przyłączone do grupy docelowej multiemisji w interfejsie sprzężenia zwrotnego. Wartość TRUE powoduje, że dane multiemisji wysyłane przez aplikację na komputerze lokalnym mają być dostarczane do gniazda nasłuchiwania w interfejsie sprzężenia zwrotnego. Wartość FALSE uniemożliwia wysyłanie danych multiemisji przez aplikację na komputerze lokalnym do gniazda nasłuchiwania w interfejsie sprzężenia zwrotnego. Domyślnie SIO_MULTIPOINT_LOOPBACK jest włączona.
SIO_MULTICAST_SCOPE (ustawienie opcode: I, T==1)
Określa zakres, w którym będą wykonywane transmisje multiemisji. Zakres jest definiowany jako liczba segmentów sieci kierowanych do objęcia. Zakres zerowy wskazuje, że transmisja multiemisji nie zostanie umieszczona na przewodzie, ale może być rozpowszechniona między gniazdami w hoście lokalnym. Wartość zakresu jednego (wartość domyślna) wskazuje, że transmisja zostanie umieszczona na przewodzie, ale nie będzie przekraczać żadnych routerów. Wyższe wartości zakresu określają liczbę routerów, które można przekroczyć. Należy pamiętać, że odpowiada to parametrowi time-to-live (TTL) w multiemisji IP. Domyślnie zakres to 1.
SIO_QUERY_RSS_PROCESSOR_INFO (ustawienie kodu opcode: O, T==1)
Wykonuje zapytanie dotyczące skojarzenia między gniazdem a rdzeniem procesora RSS i węzłem NUMA.
SIO_QUERY_RSS_PROCESSOR_INFO IOCTL zwraca strukturę SOCKET_PROCESSOR_AFFINITY zawierającą PROCESSOR_NUMBER i identyfikator węzła NUMA. Zwrócona struktura PROCESSOR_NUMBER zawiera numer grupy i względny numer procesora w grupie.
Aby uzyskać bardziej szczegółowe informacje, zobacz dokumentację SIO_QUERY_RSS_PROCESSOR_INFO . SIO_QUERY_RSS_PROCESSOR_INFO jest obsługiwana w systemach Windows 8, Windows Server 2012 i nowszych.
SIO_QUERY_RSS_SCALABILITY_INFO (ustawienie opcode: O, T==3)
Zapytania odciążają interfejsy na potrzeby możliwości skalowania po stronie odbierającej (RSS). Struktura argumentów zwracana dla SIO_QUERY_RSS_SCALABILITY_INFO jest określona w strukturze RSS_SCALABILITY_INFO zdefiniowanej w pliku nagłówka Mstcpip.h . Ta struktura jest definiowana w następujący sposób:
// Scalability info for the transport
typedef struct _RSS_SCALABILITY_INFO {
BOOLEAN RssEnabled;
} RSS_SCALABILITY_INFO, *PRSS_SCALABILITY_INFO;
Wartość zwrócona w elemenabled elementu członkowskiego RssEnabled wskazuje, czy funkcja RSS jest włączona w co najmniej jednym interfejsie.
Jeśli bufor wyjściowy nie jest wystarczająco duży dla struktury RSS_SCALABILITY_INFO ( wartość cbOutBuffer jest mniejsza niż rozmiar RSS_SCALABILITY_INFO) lub parametr lpvOutBuffer jest wskaźnikiem NULL , SOCKET_ERROR jest zwracany w wyniku tego błędu IOCTL i WSAGetLastError zwraca wartość WSAEINVAL.
W przypadku sieci o dużej szybkości, w której znajduje się wiele procesorów CPU w jednym systemie, możliwość skalowania stosu protokołu sieciowego na dużą skalę w systemie z wieloma procesorami CPU jest hamowana, ponieważ architektura NDIS 5.1 i wcześniejszych wersji ogranicza przetwarzanie protokołu do pojedynczego procesora CPU. Skalowanie po stronie odbierającej (RSS) rozwiązuje ten problem, zezwalając na równoważenie obciążenia sieciowego z karty sieciowej na wiele procesorów CPU.
SIO_QUERY_RSS_SCALABILITY_INFO jest obsługiwana w systemie Windows Vista i nowszych wersjach.
SIO_QUERY_TRANSPORT_SETTING (ustawienie kodu opcode: I, T==3)
Wysyła zapytanie do ustawień transportu na gniazdach. Zapytanie dotyczące ustawienia transportu jest oparte na TRANSPORT_SETTING_ID przekazanym w parametrze lpvInBuffer .
Jedynym ustawieniem transportu, które obecnie definiuje, jest REAL_TIME_NOTIFICATION_CAPABILITY możliwości w gniazdie TCP.
Jeśli TRANSPORT_SETTING_ID ma element członkowski Guid ustawiony na REAL_TIME_NOTIFICATION_CAPABILITY, jest to żądanie wysyłania zapytań o ustawienia powiadomień w czasie rzeczywistym dla gniazda TCP używanego z kontrolką ControlChannelTrigger do odbierania powiadomień sieciowych w tle w aplikacji Ze Sklepu Windows. Jeśli wywołanie WSAIoctl lub WSPIoctl powiedzie się, ta funkcja IOCTL zwraca strukturę REAL_TIME_NOTIFICATION_SETTING_OUTPUT z bieżącym stanem.
Aby uzyskać bardziej szczegółowe informacje, zobacz dokumentację SIO_QUERY_TRANSPORT_SETTING . SIO_QUERY_TRANSPORT_SETTING jest obsługiwana w systemach Windows 8, Windows Server 2012 i nowszych.
SIO_QUERY_WFP_ALE_ENDPOINT_HANDLE (ustawienie kodu opcode: O, T==3)
Wysyła zapytanie do uchwytu punktu końcowego wymuszania warstwy aplikacji (ALE).
Platforma filtrowania systemu Windows (WFP) obsługuje inspekcję i modyfikowanie ruchu sieciowego. W systemie Windows Vista WFP koncentruje się na scenariuszach, w których maszyna hosta jest punktem końcowym komunikacji. W systemie Windows Server 2008 istnieją jednak implementacje zapory brzegowej, które chcą wykorzystać platformę WFP do inspekcji i przekazywania przez serwer proxy ruchu. Serwer Internet Security and Acceleration (ISA) jest przykładem takiego urządzenia brzegowego.
Istnieją pewne scenariusze zapory, które mogą wymagać możliwości wstrzykiwania pakietu przychodzącego do ścieżki wysyłania skojarzonej z istniejącym punktem końcowym. Musi istnieć mechanizm odnajdywania uchwytu punktu końcowego warstwy transportu skojarzonego z docelowym punktem końcowym. Aplikacja, która utworzyła punkt końcowy, jest właścicielem tych punktów końcowych warstwy transportu. Ta biblioteka IOCTL służy do zapewniania dojścia gniazda do mapowania do obsługi punktu końcowego warstwy transportu.
Jeśli bufor wyjściowy nie jest wystarczająco duży dla dojścia punktu końcowego ( cbOutBuffer jest mniejszy niż rozmiar UINT64) lub parametr lpvOutBuffer jest wskaźnikiem NULL , SOCKET_ERROR jest zwracany w wyniku tego IOCTL i WSAGetLastError zwraca wartość WSAEINVAL.
SIO_QUERY_WFP_ALE_ENDPOINT_HANDLE jest obsługiwana w systemie Windows Vista i nowszych wersjach.
SIO_QUERY_WFP_CONNECTION_REDIRECT_CONTEXT (ustawienie kodu opcode: I, T==3)
Wysyła zapytanie do kontekstu przekierowania dla rekordu przekierowania używanego przez usługę przekierowania platformy filtrowania systemu Windows (WFP).
SIO_QUERY_WFP_CONNECTION_REDIRECT_CONTEXT IOCTL służy do zapewniania śledzenia połączeń proxied na przekierowanych połączeniach gniazd. Ta funkcja WFP ułatwia śledzenie rekordów przekierowania z początkowego przekierowania połączenia z ostatecznym połączeniem z miejscem docelowym.
Aby uzyskać bardziej szczegółowe informacje, zobacz dokumentację SIO_QUERY_WFP_CONNECTION_REDIRECT_CONTEXT . SIO_QUERY_WFP_CONNECTION_REDIRECT_CONTEXT jest obsługiwana w systemach Windows 8, Windows Server 2012 i nowszych.
SIO_QUERY_WFP_CONNECTION_REDIRECT_RECORDS (ustawienie opcode: I, T==3)
Wysyła zapytanie do rekordu przekierowania dla zaakceptowanego połączenia TCP/IP do użycia przez usługę przekierowania platformy filtrowania systemu Windows (WFP).
SIO_QUERY_WFP_CONNECTION_REDIRECT_RECORDS IOCTL służy do zapewniania śledzenia połączeń proxied na przekierowanych połączeniach gniazd. Ta funkcja WFP ułatwia śledzenie rekordów przekierowania z początkowego przekierowania połączenia z ostatecznym połączeniem z miejscem docelowym.
Aby uzyskać bardziej szczegółowe informacje, zobacz dokumentację SIO_QUERY_WFP_CONNECTION_REDIRECT_RECORDS . SIO_QUERY_WFP_CONNECTION_REDIRECT_RECORDS jest obsługiwana w systemach Windows 8, Windows Server 2012 i nowszych.
SIO_RCVALL (ustawienie kodu opcode: I, T==3)
Umożliwia gniazdo odbierania wszystkich pakietów IPv4 lub IPv6 przechodzących przez interfejs sieciowy. Dojście gniazda przekazane do funkcji WSAIoctl musi być jednym z następujących elementów:
- Gniazdo IPv4, które zostało utworzone z rodziną adresów ustawioną na AF_INET, typ gniazda ustawiony na SOCK_RAW i protokół ustawiony na IPPROTO_IP.
- Gniazdo IPv6 utworzone z rodziną adresów ustawioną na AF_INET6, typ gniazda ustawiony na SOCK_RAW i protokół ustawiony na IPPROTO_IPV6.
Gniazdo musi być również powiązane z jawnym lokalnym interfejsem IPv4 lub IPv6, co oznacza, że nie można powiązać z INADDR_ANY lub in6addr_any.
W systemie Windows Server 2008 i starszych ustawienie SIO_RCVALL IOCTL nie przechwytuje pakietów lokalnych wysyłanych z interfejsu sieciowego. Obejmowało to pakiety odebrane w innym interfejsie i przesłano dalej interfejs sieciowy określony dla SIO_RCVALL IOCTL.
W systemach Windows 7 i Windows Server 2008 R2 zmieniono to tak, aby lokalne pakiety wysyłane z interfejsu sieciowego były również przechwytywane. Obejmuje to pakiety odebrane w innym interfejsie, a następnie przekazane do interfejsu sieciowego powiązane z gniazdem z SIO_RCVALL IOCTL.
Ustawienie tej listy IOCTL wymaga uprawnień administratora na komputerze lokalnym.
Ta funkcja jest czasami określana jako tryb promiskuiczny.
Możliwe wartości opcji IOCTL SIO_RCVALL są określone w wyliczeniu RCVALL_VALUE zdefiniowanym w pliku nagłówka Mstcpip.h . Możliwe wartości dla SIO_RCVALL są następujące:
| Termin | Opis |
|---|---|
|
RCVALL_OFF |
Wyłącz tę opcję, aby gniazdo nie odbierało wszystkich pakietów IPv4 ani IPv6 w sieci. |
|
RCVALL_ON |
Włącz tę opcję, aby gniazdo odbierało wszystkie pakiety IPv4 lub IPv6 w sieci. Ta opcja umożliwia tryb promiscuous na karcie interfejsu sieciowego (NIC), jeśli karta sieciowa obsługuje tryb promiscuous. W segmencie sieci LAN z koncentratorem sieciowym karta sieciowa obsługująca tryb promiskuiczny przechwytuje cały ruch IPv4 lub IPv6 w sieci LAN, w tym ruch między innymi komputerami w tym samym segmencie sieci LAN. Wszystkie przechwycone pakiety (IPv4 lub IPv6, w zależności od gniazda) zostaną dostarczone do nieprzetworzonego gniazda. Ta opcja nie będzie przechwytywała innych pakietów (na przykład pakietów ARP, IPX i NetBEUI) w interfejsie. Netmon używa tego samego trybu dla interfejsu sieciowego, ale nie używa tej opcji do przechwytywania ruchu. |
|
RCVALL_SOCKETLEVELONLY |
Ta funkcja nie jest obecnie zaimplementowana, więc ustawienie tej opcji nie ma żadnego wpływu. |
|
RCVALL_IPLEVEL |
Włącz tę opcję, aby gniazdo IPv4 lub IPv6 odbierało wszystkie pakiety na poziomie adresu IP w sieci. Ta opcja nie włącza trybu promiscuous na karcie interfejsu sieciowego. Ta opcja ma wpływ tylko na przetwarzanie pakietów na poziomie adresu IP. Karta sieciowa nadal odbiera tylko pakiety kierowane do skonfigurowanych adresów emisji pojedynczej i multiemisji. Jednak gniazdo z włączoną tą opcją otrzyma nie tylko pakiety kierowane do określonych adresów IP, ale otrzymają wszystkie pakiety IPv4 lub IPv6 odbierane przez kartę sieciową. Ta opcja nie przechwytuje innych pakietów (na przykład pakietów ARP, IPX i NetBEUI) odebranych w interfejsie. |
Aby uzyskać bardziej szczegółowe informacje, zobacz dokumentację SIO_RCVALL .
SIO_RCVALL jest obsługiwana w systemie Windows 2000 lub nowszym.
SIO_RCVALL_IGMPMCAST (ustawienie kodu opcode: I, T==3)
Umożliwia gniazdo odbierania całego ruchu IP multiemisji IGMP w sieci bez odbierania innego ruchu IP multiemisji. Uchwyt gniazda przekazywany do funkcji WSAIoctl musi być rodziny adresów AF_INET, typu gniazda SOCK_RAW i protokołu IPPROTO_IGMP. Gniazdo musi być również powiązane z jawnym interfejsem lokalnym, co oznacza, że nie można powiązać z INADDR_ANY.
Po powiązaniu gniazda i ustawieniu IOCTL wywołania funkcji WSARecv lub recv zwracają multiemisji datagramy IP przechodzące przez dany interfejs. Należy pamiętać, że należy podać wystarczająco duży bufor. Ustawienie tej listy IOCTL wymaga uprawnień administratora na komputerze lokalnym.
SIO_RCVALL_IGMPMCAST jest obsługiwany w systemie Windows 2000 lub nowszym.
SIO_RCVALL_MCAST (ustawienie opcode: I, T==3)
Umożliwia gniazdo odbierania całego ruchu IP multiemisji w sieci (czyli wszystkich pakietów IP przeznaczonych dla adresów IP w zakresie od 224.0.0.0 do 239.255.255.255.255). Uchwyt gniazda przekazywany do funkcji WSAIoctl musi być rodziny adresów AF_INET, typu gniazda SOCK_RAW i protokołu IPPROTO_UDP. Gniazdo musi również wiązać się z jawnym interfejsem lokalnym, co oznacza, że nie można powiązać z INADDR_ANY. Gniazdo powinno wiązać się z zerem portów.
Po powiązaniu gniazda i ustawieniu IOCTL wywołania funkcji WSARecv lub recv zwracają multiemisji datagramy IP przechodzące przez dany interfejs. Należy pamiętać, że należy podać wystarczająco duży bufor. Ustawienie tej listy IOCTL wymaga uprawnień administratora na komputerze lokalnym.
SIO_RCVALL_MCAST jest obsługiwana w systemie Windows 2000 lub nowszym.
SIO_RELEASE_PORT_RESERVATION (ustawienie opcode: I, T==3)
Zwalnia rezerwację środowiska uruchomieniowego dla bloku portów TCP lub UDP. Rezerwacja środowiska uruchomieniowego do wydania musi zostać pobrana z procesu wystawiającego przy użyciu SIO_ACQUIRE_PORT_RESERVATION IOCTL.
Aby uzyskać bardziej szczegółowe informacje, zobacz dokumentację SIO_RELEASE_PORT_RESERVATION .
SIO_RELEASE_PORT_RESERVATION jest obsługiwany w systemie Windows Vista i nowszych wersjach systemu operacyjnego.
SIO_ROUTING_INTERFACE_CHANGE (ustawienie kodu opcode: I, T==1)
Aby otrzymywać powiadomienia o zmianie interfejsu routingu, który powinien być używany do uzyskiwania dostępu do adresu zdalnego w buforze wejściowym (określony jako struktura sockaddr ). Żadne informacje wyjściowe dotyczące nowego interfejsu routingu nie zostaną podane po zakończeniu tej IOCTL; ukończenie jedynie wskazuje, że interfejs routingu dla danego miejsca docelowego został zmieniony i powinien zostać zapytany przy użyciu SIO_ROUTING_INTERFACE_QUERY IOCTL.
Zakłada się, że chociaż nie jest to wymagane, aplikacja używa nakładających się operacji we/wy, aby otrzymywać powiadomienia o zmianie interfejsu routingu przez ukończenie żądania SIO_ROUTING_INTERFACE_CHANGE . Alternatywnie, jeśli SIO_ROUTING_INTERFACE_CHANGE IOCTL jest wystawiany na gniazdo nieblokujące z parametrami lpOverlapped i lpCompletionRoutine ustawionymi na wartość NULL), zostanie natychmiast zwrócony i WSAEWOULDBLOCK jako błąd, a aplikacja może następnie poczekać na przekierowanie zdarzeń zmiany za pomocą wywołania polecenia WSAEventSelect lub WSAAsyncSelect z FD_ROUTING_INTERFACE_CHANGE bitem ustawionym w maski bitów zdarzeń sieciowych.
Wiadomo, że informacje dotyczące routingu pozostają stabilne w większości przypadków, dzięki czemu wymaganie od aplikacji zachowania wielu zaległych list IOCTLs w celu otrzymywania powiadomień o wszystkich miejscach docelowych, które są zainteresowane, a także o tym, że dostawca usług śledzi te żądania powiadomień, będzie używać znacznej ilości zasobów systemowych. Tę sytuację można uniknąć, rozszerzając znaczenie parametrów wejściowych i usuwając wymagania dostawcy usług w następujący sposób:
- Aplikacja może określić adres wieloznaczny specyficzny dla rodziny protokołów (taki sam jak używany w wywołaniu powiązania podczas żądania powiązania z dowolnym dostępnym adresem) w celu żądania powiadomień o wszelkich zmianach routingu. Dzięki temu aplikacja może zachować tylko jeden wybitny SIO_ROUTING_INTERFACE_CHANGE dla wszystkich gniazd i miejsc docelowych, które ma, a następnie użyć SIO_ROUTING_INTERFACE_QUERY , aby uzyskać rzeczywiste informacje o routingu.
- Dostawca usług ma możliwość ignorowania informacji określonych przez aplikację w buforze wejściowym SIO_ROUTING_INTERFACE_CHANGE (tak jakby aplikacja określiła adres wieloznaczny) i ukończyć SIO_ROUTING_INTERFACE_CHANGE IOCTL lub sygnał FD_ROUTING_INTERFACE_CHANGE zdarzenie w przypadku zmiany informacji o routingu (nie tylko trasy do miejsca docelowego określonego w buforze wejściowym).
SIO_ROUTING_INTERFACE_QUERY (ustawienie kodu opcode: I, O, T==1)
Aby uzyskać adres interfejsu lokalnego (reprezentowany jako struktura sockaddr ), który powinien służyć do wysyłania do adresu zdalnego określonego w buforze wejściowym (jako sockaddr). Adresy multiemisji zdalnej mogą być przesyłane w buforze wejściowym, aby uzyskać adres preferowanego interfejsu do transmisji multiemisji. W każdym razie zwrócony adres interfejsu może być używany przez aplikację w kolejnym żądaniu bind().
Należy pamiętać, że trasy mogą ulec zmianie. W związku z tym aplikacje nie mogą polegać na informacjach zwracanych przez SIO_ROUTING_INTERFACE_QUERY jako trwałych. Aplikacje mogą rejestrować się w celu kierowania powiadomień o zmianie routingu za pośrednictwem SIO_ROUTING_INTERFACE_CHANGE IOCTL, który zapewnia powiadomienia za pośrednictwem nakładających się operacji we/wy lub zdarzenia FD_ROUTING_INTERFACE_CHANGE. Następująca sekwencja akcji może służyć do zagwarantowania, że aplikacja zawsze ma aktualne informacje o interfejsie routingu dla danego miejsca docelowego:
- Problem SIO_ROUTING_INTERFACE_CHANGE IOCTL
- Problem SIO_ROUTING_INTERFACE_QUERY IOCTL
- Za każdym razem, gdy SIO_ROUTING_INTERFACE_CHANGE IOCTL powiadamia o zastosowaniu zmiany routingu (przez nakładające się operacje we/wy lub za pomocą sygnału FD_ROUTING_INTERFACE_CHANGE zdarzenia), należy powtórzyć całą sekwencję akcji.
Jeśli bufor wyjściowy nie jest wystarczająco duży, aby zawierać adres interfejsu, SOCKET_ERROR jest zwracany w wyniku tego błędu IOCTL i WSAGetLastError zwraca wartość WSAEFAULT. Wymagany rozmiar buforu wyjściowego zostanie zwrócony w pliku lpcbBytesReturned w tym przypadku. Zwróć uwagę, że kod błędu WSAEFAULT jest również zwracany, jeśli lpvInBuffer, lpvOutBuffer lub lpcbBytesReturned parametr nie jest całkowicie zawarty w prawidłowej części przestrzeni adresowej użytkownika.
Jeśli adres docelowy określony w buforze wejściowym nie może zostać osiągnięty za pośrednictwem żadnego z dostępnych interfejsów, SOCKET_ERROR zostanie zwrócony w wyniku tego błędu IOCTL i WSAGetLastError zwraca wartość WSAENETUNREACH , a nawet WSAENETDOWN , jeśli cała łączność sieciowa zostanie utracona.
SIO_SET_COMPATIBILITY_MODE (ustawienie opcode: I, T==3)
Żąda, jak stos sieciowy powinien obsługiwać określone zachowania, dla których domyślny sposób obsługi zachowania może się różnić w różnych wersjach systemu Windows. Struktura argumentów dla SIO_SET_COMPATIBILITY_MODE jest określona w strukturze WSA_COMPATIBILITY_MODE zdefiniowanej w pliku nagłówkowym Mswsockdef.h . Ta struktura jest definiowana w następujący sposób:
/* Argument structure for SIO_SET_COMPATIBILITY_MODE */
typedef struct _WSA_COMPATIBILITY_MODE {
WSA_COMPATIBILITY_BEHAVIOR_ID BehaviorId;
ULONG TargetOsVersion;
} WSA_COMPATIBILITY_MODE, *PWSA_COMPATIBILITY_MODE;
Wartość określona w elemencie BehaviorId wskazuje żądane zachowanie. Wartość określona w elemencie członkowskim TargetOsVersion wskazuje wersję systemu Windows żądaną dla zachowania.
Element członkowski BehaviorId może być jedną z wartości typu wyliczenia WSA_COMPATIBILITY_BEHAVIOR_ID zdefiniowanym w pliku nagłówkowym Mswsockdef.h . Możliwe wartości elementu członkowskiego BehaviorId są następujące.
| Termin | Opis |
|---|---|
|
WsaBehaviorAll |
Jest to równoważne żądaniu wszystkich możliwych zgodnych zachowań zdefiniowanych dla WSA_COMPATIBILITY_BEHAVIOR_ID. |
|
WsaBehaviorReceiveBuffering |
Jeśli element członkowski TargetOsVersion jest ustawiony na wartość dla systemu Windows Vista lub nowszego, redukcje rozmiaru buforu odbierania TCP na tym gniazda przy użyciu opcji gniazda SO_RCVBUF są dozwolone nawet po ustanowieniu połączenia TCP. Jeśli element członkowski TargetOsVersion jest ustawiony na wartość wcześniejszą niż Windows Vista, redukcje rozmiaru buforu odbierania TCP na tym gniazda przy użyciu opcji gniazda SO_RCVBUF są niedozwolone po ustanowieniu połączenia. |
|
WsaBehaviorAutoTuning |
Gdy element członkowski TargetOsVersion jest ustawiony na wartość dla systemu Windows Vista lub nowszego, automatyczne dostrajanie okna odbierania jest włączone, a współczynnik skalowania okien TCP jest zmniejszony do 2 z wartości domyślnej 8. Gdy właściwość TargetOsVersion jest ustawiona na wartość wcześniejszą niż Windows Vista, automatyczne dostrajanie okna odbierania jest wyłączone. Opcja skalowania okien TCP jest również wyłączona, a maksymalny rozmiar okna odbierania true jest ograniczony do 65 535 bajtów. Nie można wynegocjować opcji skalowania okien TCP w połączeniu, nawet jeśli opcja gniazda SO_RCVBUF została wywołana w tym gniazdie, określając wartość większą niż 65 535 bajtów przed nawiązaniem połączenia. |
Aby uzyskać bardziej szczegółowe informacje, zobacz dokumentację SIO_SET_COMPATIBILITY_MODE .
SIO_SET_COMPATIBILITY_MODE jest obsługiwana w systemie Windows Vista i nowszych wersjach.
SIO_SET_GROUP_QOS (ustawienie kodu opcode: I, T==1)
Zarezerwowane.
SIO_SET_PRIORITY_HINT (ustawienie opcode: I, T==3)
Zawiera wskazówkę dotyczącą podstawowego protokołu transportowego w celu traktowania ruchu w tym gniazdie z określonym priorytetem. LpvInBuffer musi wskazywać zmienną typu PRIORITY_HINT z cbInBuffer ustawionym na sizeof(PRIORITY_HINT). Parametry lpvOutBuffer i cbOutBuffer muszą mieć odpowiednio wartości NULL i 0. Implementacja protokołu TCP systemu Microsoft Windows obsługuje tę bibliotekę IOCTL, począwszy od systemu Windows 10 w wersji 1809 (10.0; Skompiluj 17763) i nowsze w następujący sposób: gdy żądana wartość priorytetu jest ustawiona na wartość IoPriorityHintVeryLow, protokół TCP używa zmodyfikowanej wersji algorytmu LEDBAT (zdefiniowanego w dokumencie RFC 6817) do kontrolowania szybkości ruchu wychodzącego w gniazdach. Ruch przychodzący nie ma wpływu na ten IOCTL. LEDBAT jest algorytmem tkania, a jego celem jest utrzymanie małych opóźnień i zapobieganie negatywnym wpływom na ruch o normalnym priorytcie, wychodząc z drogi, gdy obecny jest ruch o normalnym priorytcie.
Zobacz również RFC 6817.
SIO_SET_PRIORITY_HINT jest obsługiwany w systemie Windows 10 w wersji 1809 (10.0; Kompilacja 17763) i nowsze.
SIO_SET_QOS (ustawienie kodu opcode: I, T==1)
Skojarz określoną strukturę QOS z gniazdem. Nie jest wymagany bufor wyjściowy, struktura QOS zostanie uzyskana z buforu wejściowego. Kod błędu WSAENOPROTOOPT jest wskazywany dla dostawców usług, którzy nie obsługują jakości usług.
SIO_TCP_INITIAL_RTO (ustawienie opcode: I, T==3)
Steruje początkowymi (SYN+ACK) właściwościami retransmisji gniazda TCP, konfigurując początkowe parametry limitu czasu ponownego transmisji (RTO). Parametry konfiguracji są określane w strukturze TCP_INITIAL_RTO_PARAMETERS .
Aby uzyskać bardziej szczegółowe informacje, zobacz dokumentację SIO_TCP_INITIAL_RTO . SIO_TCP_INITIAL_RTO jest obsługiwana w systemach Windows 8, Windows Server 2012 i nowszych.
SIO_TIMESTAMPING
Gniazdo IOCTL używane do konfigurowania odbioru gniazd transmisji/odbierania sygnatur czasowych. Prawidłowe tylko dla gniazd datagramu. Typ danych wejściowych dla SIO_TIMESTAMPING to struktura TIMESTAMPING_CONFIG .
Zobacz również znaczniki czasu winsock.
SIO_TRANSLATE_HANDLE (ustawienie kodu opcode: I, O, T==1)
Aby uzyskać odpowiedni uchwyt dla gniazd, które są prawidłowe w kontekście interfejsu towarzyszącego (na przykład TH_NETDEV i TH_TAPI). Stała manifestu identyfikująca interfejs towarzyszący wraz z innymi wymaganymi parametrami jest określona w buforze wejściowym. Odpowiedni uchwyt będzie dostępny w buforze danych wyjściowych po zakończeniu tej funkcji. Aby uzyskać szczegółowe informacje dotyczące konkretnego interfejsu towarzyszącego, zapoznaj się z odpowiednią sekcją w załącznikach Winsock . Kod błędu WSAENOPROTOOPT jest wskazywany dla dostawców usług, którzy nie obsługują tej biblioteki IOCTL dla określonego interfejsu towarzyszącego. To IOCTL pobiera dojście skojarzone przy użyciu SIO_TRANSLATE_HANDLE.
Zaleca się, aby model obiektów składowych (COM) był używany zamiast tego IOCTL do odnajdywania i śledzenia innych interfejsów, które mogą być obsługiwane przez gniazdo. Ten protokół IOCTL jest obecny w celu zapewnienia zgodności z poprzednimi wersjami systemów, w których com jest niedostępny lub nie może być używany z jakiegoś innego powodu.
SIO_UDP_CONNRESET (ustawienie opcode: I, T==3)
Windows XP: Określa, czy komunikaty PORT_UNREACHABLE UDP są zgłaszane. Ustaw wartość TRUE , aby włączyć raportowanie. Ustaw wartość FALSE , aby wyłączyć raportowanie.
SIO_UDP_NETRESET
Określa , czy komunikaty NET_UNREACHABLE (TTL wygasły) są zgłaszane na gniazdach UDP za pośrednictwem recv/WSARecv/etc. Przekaż wartość TRUE w buforze wejściowym, aby włączyć (wartość domyślna, jeśli jest obsługiwana). Przekaż wartość FALSE , aby wyłączyć raportowanie.
SIO_SET_WFP_CONNECTION_REDIRECT_RECORDS (ustawienie kodu opcode: I, T==3)
Ustawia rekord przekierowania do nowego gniazda TCP używanego do nawiązywania połączenia z ostatnim miejscem docelowym do użycia przez usługę przekierowania platformy filtrowania systemu Windows (WFP).
Protokół IOCTL SIO_SET_WFP_CONNECTION_REDIRECT_RECORDS jest używany w ramach śledzenia połączeń proxied na przekierowanych połączeniach gniazd. Ta funkcja WFP ułatwia śledzenie rekordów przekierowania z początkowego przekierowania połączenia z ostatecznym połączeniem z miejscem docelowym.
Aby uzyskać bardziej szczegółowe informacje, zobacz dokumentację SIO_SET_WFP_CONNECTION_REDIRECT_RECORDS . SIO_SET_WFP_CONNECTION_REDIRECT_RECORDS jest obsługiwana w systemach Windows 8, Windows Server 2012 i nowszych.
SIO_TCP_INFO (ustawienie kodu opcode: I, O, T==3)
Pobiera statystyki PROTOKOŁU TCP dla gniazda. Statystyki TCP są udostępniane w strukturze TCP_INFO_v0 .
W przeciwieństwie do pobierania statystyk TCP za pomocą funkcji GetPerTcpConnectionEStats pobieranie statystyk TCP z tym kodem kontrolnym nie wymaga, aby kod użytkownika ładował, przechowywał i filtrował tabelę połączeń TCP i nie wymaga podniesionych uprawnień do użycia.
Aby uzyskać więcej informacji, zobacz SIO_TCP_INFO. SIO_TCP_INFO jest obsługiwany w systemie Windows 10 w wersji 1703, Windows Server 2016 i nowszych.
Uwagi
Biblioteki Winsock Ioctls są definiowane w wielu różnych plikach nagłówków. Należą do nich plik nagłówkowy Winsock2.h, Mswsock.h i Mstcpip.h .
W zestawie Microsoft Windows Software Development Kit (SDK) wydanym dla systemu Windows Vista i nowszych organizacja plików nagłówków uległa zmianie, a wiele plików nagłówkowych Winsock Ioctls jest również zdefiniowanych w plikach nagłówkowych Ws2def.h, Ws2ipdef.h i Mswsockdef.h. Plik nagłówka Ws2def.h jest automatycznie dołączany przez plik nagłówka Winsock2.h . Plik nagłówka Ws2ipdef.h jest automatycznie dołączany przez plik nagłówka Ws2tcpip.h . Plik nagłówka Mswsockdef.h jest automatycznie dołączany do pliku nagłówka Mswsockdef.h .
Wymagania
| Wymaganie | Wartość |
|---|---|
| Nagłówek |
|