Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
In diesem Abschnitt werden Winsock Socket-Eingabe-/Ausgabesteuerelemente (IOCTLs) für verschiedene Editionen von Windows-Betriebssystemen beschrieben. Verwenden Sie die WSAIoctl - oder WSPIoctl-Funktion , um einen Winsock IOCTL ausstellen, um den Modus eines Sockets, des Transportprotokolls oder des Kommunikationssubsystems zu steuern.
Einige Winsock IOCTLs erfordern mehr Erläuterungen, als diese Tabelle vermitteln kann; Solche Optionen enthalten Links zu zusätzlichen Themen.
Es ist möglich, ein Codierungsschema zu übernehmen, das die aktuell definierten Ioctlsocket-Opcodes beibehalten und gleichzeitig eine bequeme Möglichkeit bietet, den Opcode-Bezeichnerbereich so weit zu partitionieren, wie der dwIoControlCode-Parameter jetzt eine 32-Bit-Entität ist. Der dwIoControlCode-Parameter ist so aufgebaut, dass die Protokoll- und Herstellerunabhängigkeit beim Hinzufügen neuer Steuercodes ermöglicht und gleichzeitig die Abwärtskompatibilität mit den Windows Sockets 1.1- und Unix-Steuerelementcodes beibehalten wird. Der dwIoControlCode-Parameter weist das folgende Formular auf.
Ich | O | V | T | Hersteller/Adressfamilie | Programmcode |
---|---|---|---|---|---|
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 |
Hinweis
Die Bits im dwIoControlCode-Parameter , der in der Tabelle angezeigt wird, müssen vertikal von oben nach unten nach Spalte gelesen werden. Das linksste Bit ist also Bit 31, das nächste Bit ist Bit 30, und das bit am weitesten rechts ist Bit 0.
Ich bin festgelegt, wenn der Eingabepuffer für den Code gültig ist, wie bei IOC_IN.
O wird festgelegt, wenn der Ausgabepuffer für den Code gültig ist, wie bei IOC_OUT. Steuercodes, die sowohl Eingabe- als auch Ausgabepuffer verwenden, legen I und O fest.
V ist festgelegt, wenn es keine Parameter für den Code gibt, wie bei IOC_VOID.
T ist eine 2-Bit-Menge, die den Typ des IOCTL definiert. Die folgenden Werte sind definiert:
0 Das IOCTL ist ein Unix IOCTL-Standardcode wie FIONREAD und FIONBIO.
1 IOCTL ist ein generischer IOCTL-Code für Windows Sockets 2. Neue für Windows Sockets 2 definierte IOCTL-Codes verfügen über T == 1.
2 Das IOCTL gilt nur für eine bestimmte Adressfamilie.
3 Das IOCTL gilt nur für den Anbieter eines bestimmten Anbieters, wie bei IOC_VENDOR. Mit diesem Typ können Unternehmen eine Lieferantennummer zugewiesen werden, die im Parameter "Vendor/Address Family " angezeigt wird. Anschließend kann der Anbieter neue IOCTLs für diesen Anbieter definieren, ohne das IOCTL bei einem Clearinghouse registrieren zu müssen, wodurch die Flexibilität und privatsphäre des Anbieters gewährleistet ist.
Hersteller/Adressfamilie Eine 11-Bit-Menge, die den Anbieter definiert, der den Code besitzt (wenn T == 3) oder die die Adressfamilie enthält, auf die der Code angewendet wird (wenn T == 2). Wenn es sich um einen Unix IOCTL-Code (T == 0) handelt, hat dieser Parameter den gleichen Wert wie der Code auf Unix. Wenn es sich um eine generische Windows Sockets 2 IOCTL (T == 1) handelt, kann dieser Parameter als Erweiterung des Codeparameters verwendet werden, um zusätzliche Codewerte bereitzustellen.
Code Die 16-Bit-Menge, die den spezifischen IOCTL-Code für den Vorgang enthält.
Unix IOCTL-Codes
Die folgenden Unix IOCTL-Codes (Befehle) werden unterstützt.
FIONBIO
Aktivieren oder Deaktivieren des nicht blockierenden Modus auf Sockets. Der lpvInBuffer-Parameter verweist auf einen nicht signierten Long (QoS), der ungleich null ist, wenn der nicht blockierende Modus aktiviert und null ist, wenn er deaktiviert werden soll. Wenn ein Socket erstellt wird, wird er im Blockierungsmodus ausgeführt (d. a. der Nicht-Blockierungsmodus ist deaktiviert). Dies entspricht BSD-Sockets.
Die WSAAsyncSelect - oder WSAEventSelect-Routine legt automatisch einen Socket auf nicht blockierenden Modus fest. Wenn WSAAsyncSelect oder WSAEventSelect auf einem Socket ausgegeben wurde, schlägt jeder Versuch, WSAIoctl zum Zurücksetzen des Sockets auf den Blockierungsmodus zu verwenden, mit WSAEINVAL fehl. Um den Socket wieder auf den Blockierungsmodus festzulegen, muss eine Anwendung zuerst WSAAsyncSelect deaktivieren, indem WSAAsyncSelect mit dem lEvent-Parameter gleich Null aufgerufen wird, oder WSAEventSelect durch Aufrufen von WSAEventSelect mit dem Parameter "lNetworkEvents " gleich Null.
FIONREAD
Bestimmen Sie die Datenmenge, die atomisch aus Sockets gelesen werden kann. Der lpvOutBuffer-Parameter verweist auf eine nicht signierte Lange, in der WSAIoctl das Ergebnis speichert.
Wenn der im Parameter s übergebene Socket datenstromorientiert ist (z. B. typ SOCK_STREAM), gibt FIONREAD die Gesamtmenge der Daten zurück, die in einem einzigen Empfangsvorgang gelesen werden können; Dies entspricht normalerweise der Gesamtmenge der Daten, die im Socket in die Warteschlange gestellt werden (da ein Datenstrom byteorientiert ist, ist dies nicht garantiert).
Wenn der im Parameter "s " übergebene Socket nachrichtenorientiert ist (z. B. typ SOCK_DGRAM), gibt FIONREAD die Anzahl der zum Lesen verfügbaren Bytes zurück, nicht die Größe des ersten Datagramms (Nachricht), das auf dem Socket in die Warteschlange gestellt wird.
SIOCATMARK
Ermitteln Sie, ob alle OOB-Daten gelesen wurden. Dies gilt nur für einen Socket mit Datenstromart (z. B. Typ SOCK_STREAM), der für den Inlineempfang von OOB-Daten (SO_OOBINLINE) konfiguriert wurde. Wenn keine OOB-Daten auf das Lesen warten, gibt der Vorgang WAHR zurück. Andernfalls wird FALSE zurückgegeben, und der nächste empfangene Vorgang, der für den Socket ausgeführt wird, ruft einige oder alle Daten ab, die der Markierung vorausgehen; die Anwendung sollte den SIOCATMARK-Vorgang verwenden, um zu bestimmen, ob vorhanden ist. Wenn es normale Daten vor den dringenden (out of band)-Daten gibt, werden sie in der Reihenfolge empfangen. (Beachten Sie, dass Recv-Vorgänge nie OOB und normale Daten im gleichen Aufruf kombinieren.) lpvOutBuffer verweist auf einen BOOL, in dem WSAIoctl das Ergebnis speichert.
Windows Sockets 2-Befehle
Die folgenden Windows Sockets 2-Befehle werden unterstützt.
SIO_ACQUIRE_PORT_RESERVATION (Opcodeeinstellung: I, T==3)
Fordern Sie eine Laufzeitreservierung für einen Block von TCP- oder UDP-Ports an. Für Laufzeitportreservierungen erfordert der Portpool, dass Reservierungen aus dem Prozess genutzt werden, für dessen Socket die Reservierung gewährt wurde. Laufzeitportreservierungen dauern nur so lange, wie die Lebensdauer des Sockets, auf dem die SIO_ACQUIRE_PORT_RESERVATION IOCTL aufgerufen wurde. Im Gegensatz dazu können permanente Portreservierungen, die mit der CreatePersistentTcpPortReservation - oder CreatePersistentUdpPortReservation-Funktion erstellt wurden, von jedem Prozess genutzt werden, der die Möglichkeit hat, dauerhafte Reservierungen abzurufen.
Ausführlichere Informationen finden Sie in der SIO_ACQUIRE_PORT_RESERVATION Referenz.
SIO_ACQUIRE_PORT_RESERVATION wird unter Windows Vista und höheren Versionen des Betriebssystems unterstützt.
SIO_ADDRESS_LIST_CHANGE (Opcodeeinstellung: V, T==1)
So erhalten Sie Benachrichtigungen über Änderungen in der Liste der lokalen Transportadressen der Protokollfamilie des Sockets, an die die Anwendung gebunden werden kann. Nach Abschluss dieses IOCTL werden keine Ausgabeinformationen bereitgestellt; Der Abschluss weist lediglich darauf hin, dass sich die Liste der verfügbaren lokalen Adresse geändert hat und erneut über SIO_ADDRESS_LIST_QUERY abgefragt werden sollte.
Es wird angenommen (obwohl nicht erforderlich), dass die Anwendung überlappende E/A verwendet, um überlappende E/A durch Abschluss SIO_ADDRESS_LIST_CHANGE Anforderung über änderungen benachrichtigt zu werden. Wenn die SIO_ADDRESS_LIST_CHANGE IOCTL auf einem nicht blockierenden Socket und ohne überlappende Parameter ausgegeben wird (lpOverlapped/ lpCompletionRoutine ist auf NULL festgelegt), wird sie sofort mit dem Fehler WSAEWOULDBLOCK abgeschlossen. Die Anwendung kann dann über einen Aufruf von WSAEventSelect oder WSAAsyncSelect auf Änderungsereignisse der Adressliste warten, wobei FD_ADDRESS_LIST_CHANGE Bit in der Bitmaske des Netzwerkereignisses festgelegt ist.
SIO_ADDRESS_LIST_QUERY (Opcodeeinstellung: O, T==1)
Ruft eine Liste der lokalen Transportadressen der Protokollfamilie des Sockets ab, an die die Anwendung gebunden werden kann. Die Liste der Adressen variiert je nach Adressfamilie, und einige Adressen werden aus der Liste ausgeschlossen.
Hinweis
In Windows Plug-n-Play-Umgebungen können Adressen dynamisch hinzugefügt und entfernt werden. Daher können Anwendungen nicht auf die von SIO_ADDRESS_LIST_QUERY zurückgegebenen Informationen vertrauen, um dauerhaft zu sein. Anwendungen können sich über das SIO_ADDRESS_LIST_CHANGE IOCTL registrieren, das überlappende E/A- oder FD_ADDRESS_LIST_CHANGE-Ereignis Benachrichtigungen zur Benachrichtigung bereitstellt. Die folgende Abfolge von Aktionen kann verwendet werden, um sicherzustellen, dass die Anwendung immer aktuelle Adresslisteninformationen enthält:
- Problem SIO_ADDRESS_LIST_CHANGE IOCTL
- Problem SIO_ADDRESS_LIST_QUERY IOCTL
- Wenn SIO_ADDRESS_LIST_CHANGE IOCTL die Anwendung der Adresslistenänderung benachrichtigt (entweder durch überlappende E/A oder durch Signalisierung FD_ADDRESS_LIST_CHANGE Ereignis), sollte die gesamte Folge von Aktionen wiederholt werden.
Ausführlichere Informationen finden Sie in der SIO_ADDRESS_LIST_QUERY Referenz. SIO_ADDRESS_LIST_QUERY wird unter Windows 2000 und höher unterstützt.
SIO_APPLY_TRANSPORT_SETTING (Opcodeeinstellung: I, T==3)
Wendet eine Transporteinstellung auf einen Socket an. Die angewendete Transporteinstellung basiert auf dem TRANSPORT_SETTING_ID , der im lpvInBuffer-Parameter übergeben wird.
Die einzige derzeit definierte Transporteinstellung ist für die REAL_TIME_NOTIFICATION_CAPABILITY-Funktion in einem TCP-Socket vorgesehen.
Wenn die übergebene TRANSPORT_SETTING_ID das GUID-Element auf REAL_TIME_NOTIFICATION_CAPABILITY festgelegt hat, ist dies eine Anforderung, Echtzeitbenachrichtigungseinstellungen für den TCP-Socket anzuwenden, der mit dem ControlChannelTrigger verwendet wird, um Hintergrundnetzwerkbenachrichtigungen in einer Windows Store-App zu empfangen.
Ausführlichere Informationen finden Sie in der SIO_APPLY_TRANSPORT_SETTING Referenz. SIO_APPLY_TRANSPORT_SETTING wird unter Windows 8, Windows Server 2012 und höher unterstützt.
SIO_ASSOCIATE_HANDLE (Opcodeeinstellung: I, T==1)
Ordnen Sie diesen Socket dem angegebenen Handle einer Begleitschnittstelle zu. Der Eingabepuffer enthält den ganzzahligen Wert, der der Manifestkonstante für die Begleitschnittstelle entspricht (z. B. TH_NETDEV und TH_TAPI.), gefolgt von einem Wert, der ein Handle der angegebenen Begleitschnittstelle ist, zusammen mit anderen erforderlichen Informationen. Einzelheiten zu einer bestimmten Begleitschnittstelle finden Sie im entsprechenden Abschnitt in Winsock-Anhängen . Die Gesamtgröße wird in der Eingabepufferlänge wiedergegeben. Es ist kein Ausgabepuffer erforderlich. Der WSAENOPROTOOPT-Fehlercode ist für Dienstanbieter angegeben, die diese IOCTL nicht unterstützen. Das von dieser IOCTL zugeordnete Handle kann mithilfe von SIO_TRANSLATE_HANDLE abgerufen werden.
Eine Begleitschnittstelle kann z. B. verwendet werden, wenn ein bestimmter Anbieter (1) viele zusätzliche Steuerelemente über das Verhalten eines Sockets bereitstellt und (2) die Steuerelemente anbieterspezifisch genug sind, sodass sie vorhandenen Windows-Socketfunktionen nicht zugeordnet sind oder in Zukunft wahrscheinlich definiert werden. Es wird empfohlen, anstelle dieser IOCTL das Component Object Model (COM) zu verwenden, um andere Schnittstellen zu ermitteln und nachzuverfolgen, die möglicherweise von einem Socket unterstützt werden. Diese IOCTL ist für die (umgekehrte) Kompatibilität mit Systemen vorhanden, bei denen COM nicht verfügbar ist oder aus einem anderen Grund nicht verwendet werden kann.
SIO_ASSOCIATE_PORT_RESERVATION (Opcodeeinstellung: I, T==3)
Ordnen Sie einen Socket einer persistenten oder Laufzeitreservierung für einen vom Portreservierungstoken identifizierten TCP- oder UDP-Ports zu. Die SIO_ASSOCIATE_PORT_RESERVATION IOCTL muss ausgestellt werden, bevor der Socket gebunden ist. Wenn und wenn der Socket gebunden ist, wird der ihm zugewiesene Port aus der vom angegebenen Token identifizierten Portreservierung ausgewählt. Wenn keine Ports aus der angegebenen Reservierung verfügbar sind, schlägt der Bindungsfunktionsaufruf fehl.
Ausführlichere Informationen finden Sie in der SIO_ASSOCIATE_PORT_RESERVATION Referenz.
SIO_ASSOCIATE_PORT_RESERVATION wird unter Windows Vista und höheren Versionen des Betriebssystems unterstützt.
SIO_BASE_HANDLE (Opcodeeinstellung: O, T==1)
Ruft das Basisdienstanbieterhandle für einen bestimmten Socket ab. Der zurückgegebene Wert ist ein SOCKET.
Ein Anbieter mit Ebenen würde diesen IOCTL nie abfangen, da der Rückgabewert der Sockethandle vom Basisdienstanbieter sein muss.
Wenn der Ausgabepuffer für ein Sockethandle nicht groß genug ist (der cbOutBuffer kleiner als die Größe eines SOCKETs ist) oder der lpvOutBuffer-Parameter ein NULL-Zeiger ist, wird SOCKET_ERROR als Ergebnis dieser IOCTL zurückgegeben, und WSAGetLastError gibt WSAEFAULT zurück.
SIO_BASE_HANDLE wird in der Headerdatei "Mswsock.h " definiert und unter Windows Vista und höher unterstützt.
SIO_BSP_HANDLE (Opcodeeinstellung: O, T==1)
Ruft das Basisdienstanbieterhandle für einen Socket ab, der von der WSASendMsg-Funktion verwendet wird. Der zurückgegebene Wert ist ein SOCKET.
Diese Ioctl wird von einem Schichtdienstanbieter verwendet, um sicherzustellen, dass der Anbieter die WSASendMsg-Funktion abfangen kann.
Wenn der Ausgabepuffer für ein Sockethandle nicht groß genug ist (der cbOutBuffer kleiner als die Größe eines SOCKETs ist) oder der lpvOutBuffer-Parameter ein NULL-Zeiger ist, wird SOCKET_ERROR als Ergebnis dieser IOCTL zurückgegeben, und WSAGetLastError gibt WSAEFAULT zurück.
SIO_BSP_HANDLE wird in der Headerdatei "Mswsock.h " definiert und unter Windows Vista und höher unterstützt.
SIO_BSP_HANDLE_SELECT (Opcodeeinstellung: O, T==1)
Ruft das Basisdienstanbieterhandle für einen Socket ab, der von der Auswahlfunktion verwendet wird. Der zurückgegebene Wert ist ein SOCKET.
Diese Ioctl wird von einem Schichtdienstanbieter verwendet, um sicherzustellen, dass der Anbieter die Auswahlfunktion abfangen kann.
Wenn der Ausgabepuffer für ein Sockethandle nicht groß genug ist (der cbOutBuffer kleiner als die Größe eines SOCKETs ist) oder der lpvOutBuffer-Parameter ein NULL-Zeiger ist, wird SOCKET_ERROR als Ergebnis dieser IOCTL zurückgegeben, und WSAGetLastError gibt WSAEFAULT zurück.
SIO_BSP_HANDLE_SELECT wird in der Headerdatei "Mswsock.h " definiert und unter Windows Vista und höher unterstützt.
SIO_BSP_HANDLE_POLL (Opcodeeinstellung: O, T==1)
Ruft das Basisdienstanbieterhandle für einen Socket ab, der von der WSAPoll-Funktion verwendet wird. Der lpOverlapped-Parameter muss ein NULL-Zeiger sein. Der zurückgegebene Wert ist ein SOCKET.
Diese Ioctl wird von einem Schichtdienstanbieter verwendet, um sicherzustellen, dass der Anbieter die WSAPoll-Funktion abfangen kann.
Wenn der Ausgabepuffer für ein Sockethandle nicht groß genug ist (der cbOutBuffer ist kleiner als die Größe eines SOCKET), ist der Parameter "lpvOutBuffer " ein NULL-Zeiger , oder der lpOverlapped-Parameter ist kein NULL-Zeiger , SOCKET_ERROR als Ergebnis dieser IOCTL zurückgegeben wird und WSAGetLastErrorWSAEFAULT zurückgibt.
SIO_BSP_HANDLE_POLL wird in der Headerdatei "Mswsock.h " definiert und unter Windows Vista und höher unterstützt.
SIO_CHK_QOS (Opcodeeinstellung: I, O, T==3)
Ruft Informationen zu QoS-Datenverkehrsmerkmalen ab. Während der Übergangsphase des Sendesystems zwischen Ablaufeinrichtung und Empfang einer RESV-Nachricht (siehe Wie der RSVP-Dienst TC aufruft, um weitere Informationen zur Übergangsphase zu erhalten), wird der mit einem RSVP-Fluss verknüpfte Datenverkehr basierend auf dem Diensttyp (BEST EFFORT, CONTROLLED LOAD oder GUARANTEED) geformt. Weitere Informationen finden Sie unter Verwenden von SIO_CHK_QOS im Abschnitt "Quality of Service " des Platform SDK.
SIO_CPU_AFFINITY (Opcodeeinstellung: I, T==3)
Ermöglicht die Portfreigabe und die Empfangsanzeige-Parallelisierung. Wenn Ihre Anwendung diese Socketoption verwendet, um Sockets verschiedenen Prozessoren zuzuordnen und dann die Sockets an dieselbe Adresse zu binden, werden Die Empfangsanzeigen über die Sockets basierend auf dem RSS-Hash (Receive Side Scaling) verteilt. Die RSS-Einstellungen werden nicht geändert, sodass ein bestimmter Fluss (lokaler Endpunkt, Remoteendpunktpaar) immer auf demselben Prozessor angegeben wird. Daher werden alle Pakete, die zu einem bestimmten Fluss gehören, demselben Socket angezeigt. Diese IOCTL muss vor der Bindung aufgerufen werden, andernfalls wird WSAEINVAL zurückgegeben. Der Eingabepuffer ist ein Prozessorindex (0-basiert) vom Typ USHORT. Die IOCTL ist mit SO_REUSEADDR und SO_REUSE_MULTICASTPORT nicht kompatibel. Wird nur für UDP-Sockets unterstützt.
Hinweis
Wenn Sie auf Version 10.0.19041.0 (Windows 10, Version 2004) des Windows SDK abzielen, verwenden Sie den Wert 0x98000015
anstelle des Namens SIO_CPU_AFFINITY.
SIO_ENABLE_CIRCULAR_QUEUEING (Opcodeeinstellung: V, T==1)
Gibt dem zugrunde liegenden nachrichtenorientierten Dienstanbieter an, dass eine neu angekommene Nachricht aufgrund eines Pufferwarteschlangenüberlaufs nie gelöscht werden sollte. Stattdessen sollte die älteste Nachricht in der Warteschlange entfernt werden, um die neu eingetroffene Nachricht aufzunehmen. Es sind keine Eingabe- und Ausgabepuffer erforderlich. Beachten Sie, dass diese IOCTL nur für Sockets gültig ist, die mit unzuverlässigen, nachrichtenorientierten Protokollen verknüpft sind. Der WSAENOPROTOOPT-Fehlercode ist für Dienstanbieter angegeben, die diese IOCTL nicht unterstützen.
SIO_FIND_ROUTE (Opcodeeinstellung: O, T==1)
Wenn diese IOCTL ausgestellt wird, fordert diese IOCTL an, dass die Route zur Remoteadresse, die als Sockaddr im Eingabepuffer angegeben ist, ermittelt werden. Wenn die Adresse bereits im lokalen Cache vorhanden ist, wird der Eintrag ungültig. Bei Novells IPX initiiert dieser Aufruf einen IPX GetLocalTarget (GLT), der das Netzwerk für die angegebene Remoteadresse abfragt.
SIO_FLUSH (Opcodeeinstellung: V, T==1)
Verwirft den aktuellen Inhalt der sendenden Warteschlange, die diesem Socket zugeordnet ist. Es sind keine Eingabe- und Ausgabepuffer erforderlich. Der WSAENOPROTOOPT-Fehlercode ist für Dienstanbieter angegeben, die diese IOCTL nicht unterstützen.
SIO_GET_BROADCAST_ADDRESS (Opcodeeinstellung: O, T==1)
Mit dieser IOCTL wird der Ausgabepuffer mit einer Sockaddr-Struktur gefüllt, die eine geeignete Übertragungsadresse für die Verwendung mit sendto/ WSASendTo enthält. Diese IOCTL wird für IPv6-Sockets nicht unterstützt und gibt den WSAENOPROTOOPT-Fehlercode zurück.
SIO_GET_EXTENSION_FUNCTION_POINTER (Opcodeeinstellung: O, I, T==1)
Rufen Sie einen Zeiger auf die angegebene Erweiterungsfunktion ab, die vom zugehörigen Dienstanbieter unterstützt wird. Der Eingabepuffer enthält eine GUID (Globally Unique Identifier), deren Wert die betreffende Erweiterungsfunktion identifiziert. Der Zeiger auf die gewünschte Funktion wird im Ausgabepuffer zurückgegeben. Erweiterungsfunktions-IDs werden von Dienstanbietern eingerichtet und sollten in der Herstellerdokumentation enthalten sein, die Erweiterungsfunktionen und Semantik beschreibt.
Die GUID-Werte für Erweiterungsfunktionen, die vom Windows TCP/IP-Dienstanbieter unterstützt werden, werden in der Headerdatei Mswsock.h definiert. Der mögliche Wert für diese GUIDs lautet wie folgt:
Begriff | BESCHREIBUNG |
---|---|
WSAID_ACCEPTEX |
Die AcceptEx-Erweiterungsfunktion . |
WSAID_CONNECTEX |
Die ConnectEx-Erweiterungsfunktion . |
WSAID_DISCONNECTEX |
Die DisconnectEx-Erweiterungsfunktion . |
WSAID_GETACCEPTEXSOCKADDRS |
Die Erweiterungsfunktion GetAcceptExSockaddrs . |
WSAID_TRANSMITFILE |
Die TransmissionFile-Erweiterungsfunktion . |
WSAID_TRANSMITPACKETS |
Die TransmissionPackets-Erweiterungsfunktion . |
WSAID_WSARECVMSG |
Die Erweiterungsfunktion LPFN_WSARECVMSG (WSARecvMsg). |
WSAID_WSASENDMSG |
Die Erweiterungsfunktion WSASendMsg . |
SIO_GET_GROUP_QOS (Opcodeeinstellung: O, I, T==1)
Reserviert für die zukünftige Verwendung mit Sockets.
Rufen Sie die QOS-Struktur ab, die der Socketgruppe zugeordnet ist, zu der dieser Socket gehört. Der Eingabepuffer ist optional. Bei einigen Protokollen (z. B. RSVP) kann der Eingabepuffer verwendet werden, um eine Qualität der Serviceanfrage zu qualifizieren. Die QOS-Struktur wird in den Ausgabepuffer kopiert. Wenn dieser Socket nicht zu einer geeigneten Socketgruppe gehört, werden die Elemente "SendingFlowspec " und " ReceivingFlowspec " der zurückgegebenen QOS-Struktur auf NULL festgelegt. Der WSAENOPROTOOPT-Fehlercode ist für Dienstanbieter angegeben, die keine Dienstqualität unterstützen.
SIO_GET_INTERFACE_LIST (Opcodeeinstellung: O, T==0)
Gibt eine Liste der konfigurierten IP-Schnittstellen und deren Parameter als Array von INTERFACE_INFO Strukturen zurück.
Hinweis
Die Unterstützung dieses Befehls ist für Windows Sockets 2-kompatible TCP/IP-Dienstanbieter obligatorisch.
Der lpvOutBuffer-Parameter verweist auf den Puffer, in dem die Informationen zu Schnittstellen als Array von INTERFACE_INFO Strukturen für Unicast-IP-Adressen auf den Schnittstellen gespeichert werden sollen. Der parameter cbOutBuffer gibt die Länge des Ausgabepuffers an. Die Anzahl der zurückgegebenen Schnittstellen (Anzahl der im Puffer zurückgegebenen Strukturen, auf die der lpvOutBuffer-Parameter verweist) kann basierend auf der tatsächlichen Länge des ausgabepuffers bestimmt werden, der in lpcbBytesReturned-Parameter zurückgegeben wird.
Wenn die WSAIoctl-Funktion mit SIO_GET_INTERFACE_LIST aufgerufen wird und der Ebenenmemm des Socketsparameters nicht als IPPROTO_IP definiert ist, wird WSAEINVAL zurückgegeben. Ein Aufruf der WSAIoctl-Funktion mit SIO_GET_INTERFACE_LIST gibt WSAEFAULT zurück, wenn der cbOutBuffer-Parameter , der die Länge des Ausgabepuffers angibt, zu klein ist, um die Liste der konfigurierten Schnittstellen zu empfangen.
SIO_GET_INTERFACE_LIST wird unter Windows Me/98 und Windows NT 4.0 mit SP4 und höher unterstützt.
SIO_GET_INTERFACE_LIST_EX (Opcodeeinstellung: O, T==0)
Reserviert für die zukünftige Verwendung mit Sockets.
Gibt eine Liste der konfigurierten IP-Schnittstellen und deren Parameter als Array von INTERFACE_INFO_EX Strukturen zurück.
Der lpvOutBuffer-Parameter verweist auf den Puffer, in dem die Informationen zu Schnittstellen als Array von INTERFACE_INFO_EX Strukturen für Unicast-IP-Adressen auf der Schnittstelle gespeichert werden sollen. Der parameter cbOutBuffer gibt die Länge des Ausgabepuffers an. Die Anzahl der zurückgegebenen Schnittstellen (Anzahl der in lpvOutBuffer zurückgegebenen Strukturen) kann basierend auf der tatsächlichen Länge des in lpcbBytesReturned-Parameter zurückgegebenen Ausgabepuffers bestimmt werden.
SIO_GET_INTERFACE_LIST_EX wird derzeit unter Windows nicht unterstützt.
SIO_GET_QOS (Opcodeeinstellung: O, T==1)
Reserviert für die zukünftige Verwendung mit Sockets. Rufen Sie die QOS-Struktur ab, die dem Socket zugeordnet ist. Der Eingabepuffer ist optional. Bei einigen Protokollen (z. B. RSVP) kann der Eingabepuffer verwendet werden, um eine Qualität der Serviceanfrage zu qualifizieren. Die QOS-Struktur wird in den Ausgabepuffer kopiert. Der Ausgabepuffer muss groß genug sein, um die vollständige QOS-Struktur enthalten zu können. Der WSAENOPROTOOPT-Fehlercode ist für Dienstanbieter angegeben, die keine Dienstqualität unterstützen.
Ein Absender ruft möglicherweise erst SIO_GET_QOS auf, wenn der Socket verbunden ist.
Ein Empfänger kann SIO_GET_QOS aufrufen, sobald er gebunden ist.
SIO_GET_TX_TIMESTAMP
Ein Socket-IOCTL zum Abrufen von Zeitstempeln für übertragene (TX)-Pakete. Gilt nur für Datagrammsockets.
Der SIO_GET_TX_TIMESTAMP Steuercode entfernt einen Sendezeitstempel aus der Sendezeitstempelwarteschlange eines Sockets. Aktivieren Sie zuerst den Zeitstempelempfang mithilfe des SIO_TIMESTAMPING Socket-IOCTL. Rufen Sie dann tx-Zeitstempel nach ID ab, indem Sie die WSAIoctl -Funktion (oder WSPIoctl) mit den folgenden Parametern aufrufen.
Bei SIO_GET_TX_TIMESTAMP ist die Eingabe eine UINT32-Zeitstempel-ID , und die Ausgabe ist ein UINT64-Zeitstempelwert . Bei Erfolg ist der tx-Zeitstempel verfügbar und wird zurückgegeben. Wenn keine Sendezeitstempel verfügbar sind, gibt WSAGetLastErrorWSAEWOULDBLOCK zurück.
Hinweis
TX-Zeitstempel werden nicht unterstützt, wenn sie über UDP_SEND_MSG_SIZE zusammengeklammert werden.
Siehe auch Winsock-Zeitstempel.
SIO_IDEAL_SEND_BACKLOG_CHANGE (Opcodeeinstellung: V, T==0)
Benachrichtigt eine Anwendung, wenn sich der ideale Send Backlog (ISB)-Wert für die zugrunde liegende Verbindung ändert.
Beim Senden von Daten über eine TCP-Verbindung mit Windows-Sockets ist es wichtig, eine ausreichende Menge an Daten offen zu halten (gesendet, aber noch nicht anerkannt) in TCP, um den höchsten Durchsatz zu erzielen. Der ideale Wert für die Datenmenge, die ausstehende Datenmenge, um den besten Durchsatz für die TCP-Verbindung zu erzielen, wird als ideale IsB-Größe (Send Backlog) bezeichnet. Der ISB-Wert ist eine Funktion des Bandbreitenverzögerungsprodukts der TCP-Verbindung und des angekündigten Empfangsfensters des Empfängers (und teilweise die Menge der Überlastung im Netzwerk).
Der ISB-Wert pro Verbindung steht über die TCP-Protokollimplementierung in Windows Server 2008, Windows Vista mit SP1 und höheren Versionen des Betriebssystems zur Verfügung. Die SIO_IDEAL_SEND_BACKLOG_CHANGE IOCTL kann von einer Anwendung verwendet werden, um Benachrichtigungen zu erhalten, wenn sich der ISB-Wert dynamisch für eine Verbindung ändert.
Ausführlichere Informationen finden Sie in der SIO_IDEAL_SEND_BACKLOG_CHANGE Referenz.
SIO_IDEAL_SEND_BACKLOG_CHANGE wird unter Windows Server 2008, Windows Vista mit SP1 und höheren Versionen des Betriebssystems unterstützt.
SIO_IDEAL_SEND_BACKLOG_QUERY (Opcodeeinstellung: O, T==0)
Ruft den idealen ISB-Wert (Send Backlog) für die zugrunde liegende Verbindung ab.
Beim Senden von Daten über eine TCP-Verbindung mit Windows-Sockets ist es wichtig, eine ausreichende Menge an Daten offen zu halten (gesendet, aber noch nicht anerkannt) in TCP, um den höchsten Durchsatz zu erzielen. Der ideale Wert für die Datenmenge, die ausstehende Datenmenge, um den besten Durchsatz für die TCP-Verbindung zu erzielen, wird als ideale IsB-Größe (Send Backlog) bezeichnet. Der ISB-Wert ist eine Funktion des Bandbreitenverzögerungsprodukts der TCP-Verbindung und des angekündigten Empfangsfensters des Empfängers (und teilweise die Menge der Überlastung im Netzwerk).
Der ISB-Wert pro Verbindung steht über die TCP-Protokollimplementierung in Windows Server 2008 und höher zur Verfügung. Die SIO_IDEAL_SEND_BACKLOG_QUERY IOCTL kann von einer Anwendung verwendet werden, um den ISB-Wert für eine Verbindung abzufragen.
Ausführlichere Informationen finden Sie in der SIO_IDEAL_SEND_BACKLOG_QUERY Referenz.
SIO_IDEAL_SEND_BACKLOG_QUERY wird unter Windows Server 2008, Windows Vista mit SP1 und höheren Versionen des Betriebssystems unterstützt.
SIO_KEEPALIVE_VALS (Opcodeeinstellung: I, T==3)
Aktiviert oder deaktiviert die Einstellung pro Verbindung der TCP-Keep-Alive-Option , die das TCP-Keep-Alive-Timeout und -Intervall angibt. Weitere Informationen zur Option "Keep-Alive" finden Sie unter Abschnitt 4.2.3.6 zu den Anforderungen für Internethosts – Kommunikationsebenen , die in RFC 1122 angegeben sind, auf der IETF-Website verfügbar. (Diese Ressource ist möglicherweise nur in Englisch verfügbar.)
SIO_KEEPALIVE_VALS können verwendet werden, um Keep-Alive-Sonden zu aktivieren oder zu deaktivieren und das Keep-Alive-Timeout und -Intervall festzulegen. Das Keep-Alive-Timeout gibt das Timeout in Millisekunden ohne Aktivität an, bis das erste Keep-Alive-Paket gesendet wird. Das Keep-Alive-Intervall gibt das Intervall in Millisekunden zwischen dem Senden aufeinander folgender Keep-Alive-Pakete an, wenn keine Bestätigung empfangen wird.
Die option SO_KEEPALIVE , die eine der SOL_SOCKET Socketoptionen ist, kann auch verwendet werden, um den TCP-Keep-Alive für eine Verbindung zu aktivieren oder zu deaktivieren sowie den aktuellen Status dieser Option abzufragen. Um abzufragen, ob TCP-Keep-Alive in einem Socket aktiviert ist, kann die getsockopt-Funktion mit der Option SO_KEEPALIVE aufgerufen werden. Um TCP-Keep-Alive zu aktivieren oder zu deaktivieren, kann die Setockopt-Funktion mit der option SO_KEEPALIVE aufgerufen werden. Wenn TCP-Keep-Alive mit SO_KEEPALIVE aktiviert ist, werden die Standard-TCP-Einstellungen für Keep-Alive-Timeout und -Intervall verwendet, es sei denn, diese Werte wurden mit SIO_KEEPALIVE_VALS geändert.
Ausführlichere Informationen finden Sie in der SIO_KEEPALIVE_VALS Referenz. SIO_KEEPALIVE_VALS wird unter Windows 2000 und höher unterstützt.
SIO_LOOPBACK_FAST_PATH (Opcodeeinstellung: I, T==3)
Konfiguriert einen TCP-Socket für niedrigere Latenz und schnellere Vorgänge auf der Loopbackschnittstelle. Diese IOCTL fordert an, dass der TCP/IP-Stapel einen speziellen schnellen Pfad für Loopbackvorgänge in diesem Socket verwendet. Die SIO_LOOPBACK_FAST_PATH IOCTL kann nur mit TCP-Sockets verwendet werden. Diese IOCTL muss auf beiden Seiten der Loopbacksitzung verwendet werden. Der schnelle TCP-Loopbackpfad wird entweder über die IPv4- oder IPv6-Loopbackschnittstelle unterstützt. Standardmäßig ist SIO_LOOPBACK_FAST_PATH deaktiviert.
Ausführlichere Informationen finden Sie in der SIO_LOOPBACK_FAST_PATH Referenz. SIO_LOOPBACK_FAST_PATH wird unter Windows 8, Windows Server 2012 und höher unterstützt.
SIO_MULTIPOINT_LOOPBACK (Opcodeeinstellung: V, T==1)
Steuert, ob Daten, die von einer Anwendung auf dem lokalen Computer (nicht unbedingt durch denselben Socket) in einer Multicastsitzung gesendet werden, von einem Socket empfangen werden, der mit der Multicast-Zielgruppe auf der Loopbackschnittstelle verbunden ist. Ein Wert von TRUE bewirkt, dass Multicastdaten, die von einer Anwendung auf dem lokalen Computer gesendet werden, an einen Überwachungssocket auf der Loopbackschnittstelle übermittelt werden. Ein Wert von FALSE verhindert, dass Multicastdaten, die von einer Anwendung auf dem lokalen Computer gesendet werden, an einen Überwachungssocket auf der Loopbackschnittstelle übermittelt werden. Standardmäßig ist SIO_MULTIPOINT_LOOPBACK aktiviert.
SIO_MULTICAST_SCOPE (Opcodeeinstellung: I, T==1)
Gibt den Bereich an, über den Multicastübertragungen auftreten. Der Bereich wird als die Anzahl der routingierten Netzwerksegmente definiert, die abgedeckt werden sollen. Ein Bereich von Null würde darauf hinweisen, dass die Multicastübertragung nicht auf dem Draht platziert, sondern über Sockets innerhalb des lokalen Hosts verbreitet werden könnte. Ein Bereichswert von 1 (standard) gibt an, dass die Übertragung auf dem Draht platziert wird, aber keine Router kreuzt. Höhere Bereichswerte bestimmen die Anzahl der Router, die durchquert werden können. Beachten Sie, dass dies dem TTL-Parameter (Time-to-Live) in IP-Multicasting entspricht. Der Bereich ist standardmäßig 1.
SIO_QUERY_RSS_PROCESSOR_INFO (Opcodeeinstellung: O, T==1)
Fragt die Zuordnung zwischen einem Socket und einem RSS-Prozessorkern und EINEM NUMA-Knoten ab.
Die SIO_QUERY_RSS_PROCESSOR_INFO IOCTL gibt eine SOCKET_PROCESSOR_AFFINITY Struktur zurück, die die PROCESSOR_NUMBER und die NUMA-Knoten-ID enthält. Die zurückgegebene PROCESSOR_NUMBER Struktur enthält eine Gruppennummer und eine relative Prozessornummer innerhalb der Gruppe.
Ausführlichere Informationen finden Sie in der SIO_QUERY_RSS_PROCESSOR_INFO Referenz. SIO_QUERY_RSS_PROCESSOR_INFO wird unter Windows 8, Windows Server 2012 und höher unterstützt.
SIO_QUERY_RSS_SCALABILITY_INFO (Opcodeeinstellung: O, T==3)
Abfragen offload interfaces for receive-side scaling (RSS) capability. Die für SIO_QUERY_RSS_SCALABILITY_INFO zurückgegebene Argumentstruktur wird in der in der Headerdatei "Mstcpip.h" definierten RSS_SCALABILITY_INFO Struktur angegeben. Diese Struktur ist wie folgt definiert:
// Scalability info for the transport
typedef struct _RSS_SCALABILITY_INFO {
BOOLEAN RssEnabled;
} RSS_SCALABILITY_INFO, *PRSS_SCALABILITY_INFO;
Der im RssEnabled-Element zurückgegebene Wert gibt an, ob RSS auf mindestens einer Schnittstelle aktiviert ist.
Wenn der Ausgabepuffer für die RSS_SCALABILITY_INFO Struktur nicht groß genug ist (der cbOutBuffer ist kleiner als die Größe eines RSS_SCALABILITY_INFO) oder der lpvOutBuffer-Parameter ein NULL-Zeiger ist, wird SOCKET_ERROR als Ergebnis dieser IOCTL zurückgegeben, und WSAGetLastError gibt WSAEINVAL zurück.
In Hochgeschwindigkeitsnetzwerken, bei denen sich mehrere CPUs in einem einzigen System befinden, wird die Fähigkeit des Netzwerkprotokollstapels, gut auf ein Multi-CPU-System zu skalieren, hemmt, da die Architektur von NDIS 5.1 und früheren Versionen die Protokollverarbeitung auf eine einzelne CPU beschränkt. Die empfangsseitige Skalierung (RSS) behebt dieses Problem, indem die Netzwerklast von einem Netzwerkadapter über mehrere CPUs hinweg ausgeglichen werden kann.
SIO_QUERY_RSS_SCALABILITY_INFO wird unter Windows Vista und höher unterstützt.
SIO_QUERY_TRANSPORT_SETTING (Opcodeeinstellung: I, T==3)
Fragt die Transporteinstellungen in einem Socket ab. Die abgefragte Transporteinstellung basiert auf der TRANSPORT_SETTING_ID , die im lpvInBuffer-Parameter übergeben wird.
Die einzige derzeit definierte Transporteinstellung ist für die REAL_TIME_NOTIFICATION_CAPABILITY-Funktion in einem TCP-Socket vorgesehen.
Wenn der TRANSPORT_SETTING_ID das GUID-Element auf REAL_TIME_NOTIFICATION_CAPABILITY festgelegt hat, ist dies eine Anforderung, die Echtzeitbenachrichtigungseinstellungen für den TCP-Socket abzufragen, der mit dem ControlChannelTrigger zum Empfangen von Hintergrundnetzwerkbenachrichtigungen in einer Windows Store-App verwendet wird. Wenn der WSAIoctl - oder WSPIoctl-Aufruf erfolgreich ist, gibt diese IOCTL eine REAL_TIME_NOTIFICATION_SETTING_OUTPUT Struktur mit dem aktuellen Status zurück.
Ausführlichere Informationen finden Sie in der SIO_QUERY_TRANSPORT_SETTING Referenz. SIO_QUERY_TRANSPORT_SETTING wird unter Windows 8, Windows Server 2012 und höher unterstützt.
SIO_QUERY_WFP_ALE_ENDPOINT_HANDLE (Opcodeeinstellung: O, T==3)
Fragt das ALE-Endpunkthandle (Application Layer Enforcement) ab.
Die Windows-Filterplattform (WFP) unterstützt die Überprüfung und Änderung des Netzwerkdatenverkehrs. Unter Windows Vista konzentriert sich WFP auf Szenarien, in denen der Hostcomputer der Kommunikationsendpunkt ist. Unter Windows Server 2008 gibt es jedoch Edgefirewallimplementierungen, die die WFP-Plattform zum Überprüfen und Proxydurchlaufverkehr nutzen möchten. Der ISA-Server (Internet Security and Acceleration) ist ein Beispiel für ein solches Edgegerät.
Es gibt einige Firewallszenarien, die möglicherweise die Möglichkeit erfordern, ein eingehendes Paket in den Sendepfad einzufügen, der einem vorhandenen Endpunkt zugeordnet ist. Es muss ein Mechanismus zum Ermitteln des Transportschichtendpunkthandle vorhanden sein, das dem Zielendpunkt zugeordnet ist. Die Anwendung, die den Endpunkt erstellt hat, besitzt diese Transportschichtendpunkte. Diese IOCTL wird verwendet, um sockethandle zum Transport layer endpoint handle mapping bereitzustellen.
Wenn der Ausgabepuffer für den Endpunkthandle nicht groß genug ist (der cbOutBuffer ist kleiner als die Größe eines UINT64) oder der lpvOutBuffer-Parameter ein NULL-Zeiger ist, wird SOCKET_ERROR als Ergebnis dieser IOCTL zurückgegeben, und WSAGetLastError gibt WSAEINVAL zurück.
SIO_QUERY_WFP_ALE_ENDPOINT_HANDLE wird unter Windows Vista und höher unterstützt.
SIO_QUERY_WFP_CONNECTION_REDIRECT_CONTEXT (Opcodeeinstellung: I, T==3)
Fragt den Umleitungskontext für einen Umleitungsdatensatz ab, der von einem WFP-Umleitungsdienst (Windows Filtering Platform) verwendet wird.
Die SIO_QUERY_WFP_CONNECTION_REDIRECT_CONTEXT IOCTL wird verwendet, um die Nachverfolgung von Verbindungen mit umgeleiteten Sockets zu ermöglichen. Dieses WFP-Feature erleichtert die Nachverfolgung von Umleitungsdatensätzen von der ersten Umleitung einer Verbindung mit der endgültigen Verbindung zum Ziel.
Ausführlichere Informationen finden Sie in der SIO_QUERY_WFP_CONNECTION_REDIRECT_CONTEXT Referenz. SIO_QUERY_WFP_CONNECTION_REDIRECT_CONTEXT wird unter Windows 8, Windows Server 2012 und höher unterstützt.
SIO_QUERY_WFP_CONNECTION_REDIRECT_RECORDS (Opcodeeinstellung: I, T==3)
Fragt den Umleitungseintrag für die akzeptierte TCP/IP-Verbindung für die Verwendung durch einen WFP-Umleitungsdienst (Windows Filtering Platform) ab.
Die SIO_QUERY_WFP_CONNECTION_REDIRECT_RECORDS IOCTL wird verwendet, um die Nachverfolgung von Verbindungen mit umgeleiteten Sockets zu ermöglichen. Dieses WFP-Feature erleichtert die Nachverfolgung von Umleitungsdatensätzen von der ersten Umleitung einer Verbindung mit der endgültigen Verbindung zum Ziel.
Ausführlichere Informationen finden Sie in der SIO_QUERY_WFP_CONNECTION_REDIRECT_RECORDS Referenz. SIO_QUERY_WFP_CONNECTION_REDIRECT_RECORDS wird unter Windows 8, Windows Server 2012 und höher unterstützt.
SIO_RCVALL (Opcodeeinstellung: I, T==3)
Ermöglicht es einem Socket, alle IPv4- oder IPv6-Pakete zu empfangen, die über eine Netzwerkschnittstelle übergeben werden. Der an die WSAIoctl-Funktion übergebene Socketziehpunkt muss eine der folgenden Sein:
- Ein IPv4-Socket, der mit der auf AF_INET festgelegten Adressfamilie, dem auf SOCK_RAW festgelegten Sockettyp und dem Protokoll auf IPPROTO_IP festgelegt wurde.
- Ein IPv6-Socket, der mit der auf AF_INET6 festgelegten Adressfamilie erstellt wurde, der auf SOCK_RAW festgelegte Sockettyp und das Protokoll auf IPPROTO_IPV6 festgelegt ist.
Der Socket muss auch an eine explizite lokale IPv4- oder IPv6-Schnittstelle gebunden werden, was bedeutet, dass Sie keine Bindung an INADDR_ANY oder in6addr_any.
Unter Windows Server 2008 und früheren Versionen erfasst die SIO_RCVALL IOCTL-Einstellung keine lokalen Pakete, die von einer Netzwerkschnittstelle gesendet wurden. Dazu gehörten Pakete, die auf einer anderen Schnittstelle empfangen und die für die SIO_RCVALL IOCTL angegebene Netzwerkschnittstelle weitergeleitet wurden.
Unter Windows 7 und Windows Server 2008 R2 wurde dies geändert, sodass lokale Pakete, die aus einer Netzwerkschnittstelle gesendet werden, ebenfalls erfasst werden. Dazu gehören Pakete, die auf einer anderen Schnittstelle empfangen werden, und dann die netzwerkschnittstelle weitergeleitet, die an den Socket mit SIO_RCVALL IOCTL gebunden ist.
Das Festlegen dieser IOCTL erfordert Administratorrechte auf dem lokalen Computer.
Dieses Feature wird manchmal als promiscuous Mode bezeichnet.
Die möglichen Werte für die SIO_RCVALL IOCTL-Option werden in der in der Headerdatei Mstcpip.h definierten RCVALL_VALUE Enumeration angegeben. Die möglichen Werte für SIO_RCVALL sind wie folgt:
Begriff | BESCHREIBUNG |
---|---|
RCVALL_OFF |
Deaktivieren Sie diese Option, damit ein Socket nicht alle IPv4- oder IPv6-Pakete im Netzwerk empfängt. |
RCVALL_ON |
Aktivieren Sie diese Option, damit ein Socket alle IPv4- oder IPv6-Pakete im Netzwerk empfängt. Diese Option aktiviert den promiscuous Modus auf der Netzwerkschnittstellenkarte (Network Interface Card, NIC), wenn die NIC den promiscuous Modus unterstützt. In einem LAN-Segment mit einem Netzwerkhub erfasst eine NIC, die den promiscuous Modus unterstützt, den gesamten IPv4- oder IPv6-Datenverkehr im LAN, einschließlich des Datenverkehrs zwischen anderen Computern im selben LAN-Segment. Alle erfassten Pakete (IPv4 oder IPv6, je nach Socket) werden an den unformatierten Socket übermittelt. Mit dieser Option werden keine anderen Pakete (z. B. ARP-, IPX- und NetBEUI-Pakete) auf der Schnittstelle erfasst. Netmon verwendet denselben Modus für die Netzwerkschnittstelle, verwendet diese Option jedoch nicht, um Datenverkehr zu erfassen. |
RCVALL_SOCKETLEVELONLY |
Dieses Feature ist zurzeit nicht implementiert, sodass das Festlegen dieser Option keine Auswirkungen hat. |
RCVALL_IPLEVEL |
Aktivieren Sie diese Option, damit ein IPv4- oder IPv6-Socket alle Pakete auf IP-Ebene im Netzwerk empfängt. Diese Option aktiviert nicht den promiscuous Modus auf der Netzwerkschnittstellenkarte. Diese Option wirkt sich nur auf die Paketverarbeitung auf IP-Ebene aus. Die NIC empfängt weiterhin nur Pakete, die an die konfigurierten Unicast- und Multicastadressen weitergeleitet werden. Ein Socket mit aktivierter Option empfängt jedoch nicht nur Pakete, die an bestimmte IP-Adressen weitergeleitet werden, sondern alle IPv4- oder IPv6-Pakete empfangen, die die NIC empfängt. Mit dieser Option werden keine anderen Pakete (z. B. ARP-, IPX- und NetBEUI-Pakete) erfasst, die auf der Schnittstelle empfangen werden. |
Ausführlichere Informationen finden Sie in der SIO_RCVALL Referenz.
SIO_RCVALL wird unter Windows 2000 und höher unterstützt.
SIO_RCVALL_IGMPMCAST (Opcodeeinstellung: I, T==3)
Ermöglicht es einem Socket, den gesamten IGMP-Multicast-IP-Datenverkehr im Netzwerk zu empfangen, ohne anderen Multicast-IP-Datenverkehr zu empfangen. Das an die WSAIoctl-Funktion übergebene Sockethandle muss AF_INET Adressfamilie, SOCK_RAW Sockettyp und IPPROTO_IGMP Protokoll sein. Der Socket muss auch an eine explizite lokale Schnittstelle gebunden werden, was bedeutet, dass Sie keine Bindung an INADDR_ANY.
Sobald der Socket gebunden ist und der IOCTL-Satz festgelegt ist, geben Aufrufe von WSARecv - oder Recv-Funktionen Multicast-IP-Datagramme zurück, die über die angegebene Schnittstelle übergeben werden. Beachten Sie, dass Sie einen ausreichend großen Puffer bereitstellen müssen. Das Festlegen dieser IOCTL erfordert Administratorrechte auf dem lokalen Computer.
SIO_RCVALL_IGMPMCAST wird unter Windows 2000 und höher unterstützt.
SIO_RCVALL_MCAST (Opcodeeinstellung: I, T==3)
Ermöglicht es einem Socket, den gesamten Multicast-IP-Datenverkehr im Netzwerk zu empfangen (d. h. alle IP-Pakete, die für IP-Adressen im Bereich von 224.0.0.0 bis 239.255.255.255 bestimmt sind). Das an die WSAIoctl-Funktion übergebene Sockethandle muss AF_INET Adressfamilie, SOCK_RAW Sockettyp und IPPROTO_UDP Protokoll sein. Der Socket muss auch an eine explizite lokale Schnittstelle gebunden werden, was bedeutet, dass Sie keine Bindung an INADDR_ANY herstellen können. Der Socket sollte an Port 0 gebunden werden.
Sobald der Socket gebunden ist und der IOCTL-Satz festgelegt ist, geben Aufrufe von WSARecv - oder Recv-Funktionen Multicast-IP-Datagramme zurück, die über die angegebene Schnittstelle übergeben werden. Beachten Sie, dass Sie einen ausreichend großen Puffer bereitstellen müssen. Das Festlegen dieser IOCTL erfordert Administratorrechte auf dem lokalen Computer.
SIO_RCVALL_MCAST wird unter Windows 2000 und höher unterstützt.
SIO_RELEASE_PORT_RESERVATION (Opcodeeinstellung: I, T==3)
Gibt eine Laufzeitreservierung für einen Block von TCP- oder UDP-Ports frei. Die freizugebende Laufzeitreservierung muss über das SIO_ACQUIRE_PORT_RESERVATION IOCTL aus dem Ausstellungsprozess abgerufen worden sein.
Ausführlichere Informationen finden Sie in der SIO_RELEASE_PORT_RESERVATION Referenz.
SIO_RELEASE_PORT_RESERVATION wird unter Windows Vista und höheren Versionen des Betriebssystems unterstützt.
SIO_ROUTING_INTERFACE_CHANGE (Opcodeeinstellung: I, T==1)
Wenn Sie eine Benachrichtigung über eine Routingschnittstellenänderung erhalten möchten, die verwendet werden soll, um die Remoteadresse im Eingabepuffer zu erreichen (angegeben als Sockaddr-Struktur ). Nach Abschluss dieses IOCTL werden keine Ausgabeinformationen über die neue Routingschnittstelle bereitgestellt; der Abschluss gibt lediglich an, dass sich die Routingschnittstelle für ein bestimmtes Ziel geändert hat und mithilfe der SIO_ROUTING_INTERFACE_QUERY IOCTL abgefragt werden sollte.
Es wird angenommen, obwohl nicht erforderlich, dass die Anwendung überlappende E/A verwendet, um überlappende E/A durch Abschluss SIO_ROUTING_INTERFACE_CHANGE Anforderung über die Änderung der Routingschnittstelle benachrichtigt zu werden. Wenn die SIO_ROUTING_INTERFACE_CHANGE IOCTL auf einem nicht blockierenden Socket ausgegeben wird, wobei die parameter lpOverlapped und lpCompletionRoutine auf NULL festgelegt sind), wird sie sofort zurückgegeben und WSAEWOULDBLOCK als Fehler zurückgegeben, und die Anwendung kann dann auf das Routing von Änderungsereignissen über den Aufruf von WSAEventSelect oder WSAAsyncSelect mit FD_ROUTING_INTERFACE_CHANGE Bitsatz im Netzwerkereignis-Bitmaske warten.
Es wird erkannt, dass Routinginformationen in den meisten Fällen stabil bleiben, sodass die Anwendung mehrere ausstehende IOCTLs beibehalten muss, um Benachrichtigungen zu allen Zielen zu erhalten, an denen es interessiert ist, und dass der Dienstanbieter diese Benachrichtigungsanforderungen nachverfolgt, eine erhebliche Menge Systemressourcen verwendet. Diese Situation kann vermieden werden, indem die Bedeutung der Eingabeparameter erweitert und die Anforderungen des Dienstleisters wie folgt gelockert werden:
- Die Anwendung kann eine protokollspezifische Wildcardadresse (identisch mit der beim Binden von Anrufen beim Anfordern einer Bindung an eine beliebige verfügbare Adresse) angeben, um Benachrichtigungen über Routingänderungen anzufordern. Auf diese Weise kann die Anwendung nur eine ausstehende SIO_ROUTING_INTERFACE_CHANGE für alle von ihr vorhandenen Sockets und Ziele beibehalten und dann SIO_ROUTING_INTERFACE_QUERY verwenden, um die tatsächlichen Routinginformationen abzurufen.
- Ein Dienstanbieter hat die Möglichkeit, die von der Anwendung im Eingabepuffer des SIO_ROUTING_INTERFACE_CHANGE angegebenen Informationen zu ignorieren (so als ob die Anwendung eine Wildcardadresse angegeben hat) und das SIO_ROUTING_INTERFACE_CHANGE IOCTL- oder Signal-FD_ROUTING_INTERFACE_CHANGE-Ereignis im Falle einer Änderung der Routinginformationen (nicht nur die Route zum zielspezifischen Im Eingabepuffer) abschließen.
SIO_ROUTING_INTERFACE_QUERY (Opcodeeinstellung: I, O, T==1)
Um die Adresse der lokalen Schnittstelle (dargestellt als Sockaddr-Struktur ) abzurufen, die zum Senden an die im Eingabepuffer angegebene Remoteadresse (als Sockaddr) verwendet werden soll. Remote-Multicastadressen können im Eingabepuffer übermittelt werden, um die Adresse der bevorzugten Schnittstelle für die Multicastübertragung abzurufen. In jedem Fall kann die zurückgegebene Schnittstellenadresse von der Anwendung in einer nachfolgenden Bind()-Anforderung verwendet werden.
Beachten Sie, dass Routen geändert werden können. Daher können Anwendungen nicht auf die von SIO_ROUTING_INTERFACE_QUERY zurückgegebenen Informationen vertrauen, um dauerhaft zu sein. Anwendungen können sich für das Routing von Änderungsbenachrichtigungen über das SIO_ROUTING_INTERFACE_CHANGE IOCTL registrieren, das eine Benachrichtigung überlappende E/A oder ein FD_ROUTING_INTERFACE_CHANGE-Ereignis bereitstellt. Die folgende Abfolge von Aktionen kann verwendet werden, um sicherzustellen, dass die Anwendung immer über aktuelle Routingschnittstelleninformationen für ein bestimmtes Ziel verfügt:
- Problem SIO_ROUTING_INTERFACE_CHANGE IOCTL
- Problem SIO_ROUTING_INTERFACE_QUERY IOCTL
- Wenn SIO_ROUTING_INTERFACE_CHANGE IOCTL die Anwendung von Routingänderungen benachrichtigt (entweder durch überlappende E/A oder durch Signalisierung FD_ROUTING_INTERFACE_CHANGE Ereignis), sollte die gesamte Folge von Aktionen wiederholt werden.
Wenn der Ausgabepuffer nicht groß genug ist, um die Schnittstellenadresse zu enthalten, wird SOCKET_ERROR als Ergebnis dieser IOCTL zurückgegeben, und WSAGetLastError gibt WSAEFAULT zurück. Die erforderliche Größe des Ausgabepuffers wird in diesem Fall in lpcbBytesReturned zurückgegeben. Beachten Sie, dass der WSAEFAULT-Fehlercode auch zurückgegeben wird, wenn der Parameter "lpvInBuffer", "lpvOutBuffer" oder "lpcbBytesReturned " nicht vollständig in einem gültigen Teil des Benutzeradressraums enthalten ist.
Wenn die im Eingabepuffer angegebene Zieladresse nicht über eine der verfügbaren Schnittstellen erreicht werden kann, wird SOCKET_ERROR als Ergebnis dieser IOCTL zurückgegeben, und WSAGetLastError gibt WSAENETUNREACH oder sogar WSAENETDOWN zurück, wenn alle Netzwerkkonnektivität verloren gehen.
SIO_SET_COMPATIBILITY_MODE (Opcodeeinstellung: I, T==3)
Fordert an, wie der Netzwerkstapel bestimmte Verhaltensweisen verarbeiten soll, für die sich die Standardweise der Behandlung des Verhaltens in windows-Versionen unterscheiden kann. Die Argumentstruktur für SIO_SET_COMPATIBILITY_MODE wird in der in der Headerdatei Mswsockdef.hdefinierten WSA_COMPATIBILITY_MODE Struktur angegeben. Diese Struktur ist wie folgt definiert:
/* 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;
Der im BehaviorId-Element angegebene Wert gibt das angeforderte Verhalten an. Der im TargetOsVersion-Element angegebene Wert gibt die Windows-Version an, die für das Verhalten angefordert wird.
The BehaviorId member can be one of the values from the WSA_COMPATIBILITY_BEHAVIOR_ID enumeration type defined in the Mswsockdef.h header file. Die möglichen Werte für das BehaviorId-Element sind wie folgt.
Begriff | BESCHREIBUNG |
---|---|
WsaBehaviorAll |
Dies entspricht dem Anfordern aller möglichen kompatiblen Verhaltensweisen, die für WSA_COMPATIBILITY_BEHAVIOR_ID definiert sind. |
WsaBehaviorReceiveBuffering |
Wenn das TargetOsVersion-Mitglied auf einen Wert für Windows Vista oder höher festgelegt ist, sind Reduzierungen der TCP-Empfangspuffergröße für diesen Socket mithilfe der SO_RCVBUF Socketoption auch nach der Einrichtung einer TCP-Verbindung zulässig. Wenn das TargetOsVersion-Mitglied auf einen Wert vor Windows Vista festgelegt ist, sind Reduzierungen auf die TCP-Empfangspuffergröße für diesen Socket unter Verwendung der SO_RCVBUF Socketoption nach der Verbindungseinrichtung nicht zulässig. |
WsaBehaviorAutoTuning |
Wenn das TargetOsVersion-Mitglied auf einen Wert für Windows Vista oder höher festgelegt ist, wird die Automatische Optimierung des Fensters aktiviert, und der Skalierungsfaktor des TCP-Fensters wird auf 2 vom Standardwert 8 reduziert. Wenn die TargetOsVersion auf einen Wert vor Windows Vista festgelegt ist, ist die Automatische Optimierung des Fensters deaktiviert. Die TCP-Fensterskalierungsoption ist ebenfalls deaktiviert, und die maximale Größe des empfangenden Fensters ist auf 65.535 Bytes begrenzt. Die TCP-Fensterskalierungsoption kann nicht über die Verbindung ausgehandelt werden, auch wenn die SO_RCVBUF Socketoption für diesen Socket aufgerufen wurde, die einen Wert größer als 65.535 Byte angibt, bevor die Verbindung hergestellt wurde. |
Ausführlichere Informationen finden Sie in der SIO_SET_COMPATIBILITY_MODE Referenz.
SIO_SET_COMPATIBILITY_MODE wird unter Windows Vista und höher unterstützt.
SIO_SET_GROUP_QOS (Opcodeeinstellung: I, T==1)
Reserviert.
SIO_SET_PRIORITY_HINT (Opcodeeinstellung: I, T==3)
Stellt einen Hinweis auf das zugrunde liegende Transportprotokoll bereit, um den Datenverkehr in diesem Socket mit einer bestimmten Priorität zu behandeln. Der lpvInBuffer muss auf eine Variable vom Typ PRIORITY_HINT zeigen, wobei cbInBuffer auf sizeof(PRIORITY_HINT) festgelegt ist. Die Parameter lpvOutBuffer und cbOutBuffer müssen NULL bzw. 0 sein. Die Microsoft Windows TCP-Implementierung unterstützt diese IOCTL ab Windows 10, Version 1809 (10.0; Build 17763) und höher wie folgt: Wenn der angeforderte Prioritätswert auf IoPriorityHintVeryLow festgelegt ist, verwendet TCP eine geänderte Version des LEDBAT-Algorithmus (definiert in RFC 6817), um die ausgehende Datenverkehrsrate für den Socket zu steuern. Der eingehende Datenverkehr ist von diesem IOCTL nicht betroffen. LEDBAT ist ein Gerüstalgorithmus, und sein Ziel ist es, latenzarm zu halten und negative Auswirkungen auf den normalen Prioritätsverkehr zu verhindern, indem der Datenverkehr mit normaler Priorität wegkommt, wenn normaler Datenverkehr vorhanden ist.
Siehe auch RFC 6817.
SIO_SET_PRIORITY_HINT wird unter Windows 10, Version 1809 (10.0) unterstützt. Build 17763) und höher.
SIO_SET_QOS (Opcodeeinstellung: I, T==1)
Ordnen Sie die angegebene QOS-Struktur dem Socket zu. Es ist kein Ausgabepuffer erforderlich, die QOS-Struktur wird aus dem Eingabepuffer abgerufen. Der WSAENOPROTOOPT-Fehlercode ist für Dienstanbieter angegeben, die keine Dienstqualität unterstützen.
SIO_TCP_INITIAL_RTO (Opcodeeinstellung: I, T==3)
Steuert die anfänglichen (SYN/ SYN+ACK)-Retransmissionsmerkmale eines TCP-Sockets durch Konfigurieren von anfänglichen RTO-Parametern (Retransmission Timeout). Die Konfigurationsparameter werden in einer TCP_INITIAL_RTO_PARAMETERS Struktur angegeben.
Ausführlichere Informationen finden Sie in der SIO_TCP_INITIAL_RTO Referenz. SIO_TCP_INITIAL_RTO wird unter Windows 8, Windows Server 2012 und höher unterstützt.
SIO_TIMESTAMPING
Ein Socket-IOCTL zum Konfigurieren des Empfangs von Sende-/Empfangszeitstempeln des Sockets. Gilt nur für Datagrammsockets. Der Eingabetyp für SIO_TIMESTAMPING ist die TIMESTAMPING_CONFIG Struktur.
Siehe auch Winsock-Zeitstempel.
SIO_TRANSLATE_HANDLE (Opcodeeinstellung: I, O, T==1)
Um ein entsprechendes Handle für Sockets zu erhalten, die im Kontext einer Begleitschnittstelle gültig sind (z. B. TH_NETDEV und TH_TAPI). Eine Manifestkonstante, die die Begleitschnittstelle zusammen mit anderen erforderlichen Parametern identifiziert, werden im Eingabepuffer angegeben. Das entsprechende Handle ist nach Abschluss dieser Funktion im Ausgabepuffer verfügbar. Einzelheiten zu einer bestimmten Begleitschnittstelle finden Sie im entsprechenden Abschnitt in Winsock-Anhängen . Der WSAENOPROTOOPT-Fehlercode ist für Dienstanbieter angegeben, die diese IOCTL für die angegebene Begleitschnittstelle nicht unterstützen. Mit dieser IOCTL wird das handle abgerufen, das mit SIO_TRANSLATE_HANDLE verknüpft ist.
Es wird empfohlen, anstelle dieser IOCTL das Component Object Model (COM) zu verwenden, um andere Schnittstellen zu ermitteln und nachzuverfolgen, die möglicherweise von einem Socket unterstützt werden. Diese IOCTL ist für die Abwärtskompatibilität mit Systemen vorhanden, bei denen COM nicht verfügbar ist oder aus einem anderen Grund nicht verwendet werden kann.
SIO_UDP_CONNRESET (Opcodeeinstellung: I, T==3)
Windows XP: Steuert, ob UDP-PORT_UNREACHABLE Nachrichten gemeldet werden. Auf TRUE festgelegt, um die Berichterstellung zu aktivieren. Auf FALSE festgelegt, um die Berichterstellung zu deaktivieren.
SIO_UDP_NETRESET
Steuert, ob NET_UNREACHABLE -Nachrichten (TTL abgelaufen) über recv/WSARecv/etc. auf UDP-Sockets gemeldet werden. Übergeben Sie WAHR im Eingabepuffer, um dies zu aktivieren (Standardeinstellung, falls unterstützt). Übergeben Sie FALSE , um die Berichterstellung zu deaktivieren.
SIO_SET_WFP_CONNECTION_REDIRECT_RECORDS (Opcodeeinstellung: I, T==3)
Legt den Umleitungsdatensatz auf den neuen TCP-Socket fest, der zum Herstellen einer Verbindung mit dem endgültigen Ziel für die Verwendung durch einen WFP-Umleitungsdienst (Windows Filtering Platform) verwendet wird.
Die SIO_SET_WFP_CONNECTION_REDIRECT_RECORDS IOCTL wird als Teil der Nachverfolgung von Verbindungen mit umgeleiteten Sockets verwendet. Dieses WFP-Feature erleichtert die Nachverfolgung von Umleitungsdatensätzen von der ersten Umleitung einer Verbindung mit der endgültigen Verbindung zum Ziel.
Ausführlichere Informationen finden Sie in der SIO_SET_WFP_CONNECTION_REDIRECT_RECORDS Referenz. SIO_SET_WFP_CONNECTION_REDIRECT_RECORDS wird unter Windows 8, Windows Server 2012 und höher unterstützt.
SIO_TCP_INFO (Opcodeeinstellung: I, O, T==3)
Ruft die TCP-Statistiken für einen Socket ab. Die TCP-Statistiken werden in einer TCP_INFO_v0 Struktur bereitgestellt.
Im Gegensatz zum Abrufen von TCP-Statistiken mit der GetPerTcpConnectionEStats-Funktion erfordert das Abrufen von TCP-Statistiken mit diesem Steuerelementcode nicht, dass der Benutzercode die TCP-Verbindungstabelle lädt, speichert und filtert und keine erhöhten Berechtigungen benötigt.
Weitere Informationen finden Sie unter SIO_TCP_INFO. SIO_TCP_INFO wird unter Windows 10, Version 1703, Windows Server 2016 und höher unterstützt.
Bemerkungen
Winsock Ioctls werden in einer Reihe von verschiedenen Headerdateien definiert. Dazu gehören die Headerdatei Winsock2.h, Mswsock.h und Mstcpip.h .
Im für Windows Vista und höher veröffentlichten Microsoft Windows Software Development Kit (SDK) wurde die Organisation von Headerdateien geändert, und eine Reihe von Winsock Ioctls werden auch in den Headerdateien Ws2def.h, Ws2ipdef.h und Mswsockdef.h-Headerdateien definiert. Die Headerdatei "Ws2def.h " wird automatisch von der Winsock2.h-Headerdatei eingeschlossen. Die Headerdatei "Ws2ipdef.h " wird automatisch von der Headerdatei "Ws2tcpip.h " eingeschlossen. Die Headerdatei "Mswsockdef.h " wird automatisch in der Headerdatei "Mswsockdef.h " enthalten.
Anforderungen
Anforderung | Wert |
---|---|
Kopfzeile |
|