SIO_SET_COMPATIBILITY_MODE Steuerelementcode

BESCHREIBUNG

Der SIO_SET_COMPATIBILITY_MODE Steuerelementcode fordert an, wie der Netzwerkstapel bestimmte Verhaltensweisen behandeln soll, für die sich die Standardweise des Verhaltens in Windows Versionen unterscheiden kann.

Rufen Sie zum Ausführen dieses Vorgangs die Funktion WSAIoctl oder WSPIoctl mit den folgenden Parametern auf.

int WSAIoctl(
  (socket) s,             // descriptor identifying a socket
  SIO_SET_COMPATIBILITY_MODE, // dwIoControlCode
  (LPVOID) lpvInBuffer,    // pointer to WSA_COMPATIBILITY_MODE struct
  (DWORD) cbInBuffer,      // length of input buffer
  NULL,         // output buffer
  0,       // size of output buffer
  (LPDWORD) lpcbBytesReturned,    // number of bytes returned
  (LPWSAOVERLAPPED) lpOverlapped,   // OVERLAPPED structure
  (LPWSAOVERLAPPED_COMPLETION_ROUTINE) lpCompletionRoutine,  // completion routine
);
int WSPIoctl(
  (socket) s,             // descriptor identifying a socket
  SIO_SET_COMPATIBILITY_MODE, // dwIoControlCode
  (LPVOID) lpvInBuffer,    // pointer to WSA_COMPATIBILITY_MODE struct
  (DWORD) cbInBuffer,      // length of input buffer
  NULL,         // output buffer
  0,       // size of output buffer
  (LPDWORD) lpcbBytesReturned,    // number of bytes returned
  (LPWSAOVERLAPPED) lpOverlapped,   // OVERLAPPED structure
  (LPWSAOVERLAPPED_COMPLETION_ROUTINE) lpCompletionRoutine,  // completion routine
  (LPWSATHREADID) lpThreadId,   // a WSATHREADID structure
  (LPINT) lpErrno   // a pointer to the error code.
);

Parameter

s

Ein Deskriptor, der einen Socket identifiziert.

dwIoControlCode

Der Steuerelementcode für den Vorgang. Verwenden Sie SIO_SET_COMPATIBILITY_MODE für diesen Vorgang.

lpvInBuffer

Ein Zeiger auf den Eingabepuffer. Dieser Parameter sollte auf eine WSA_COMPATIBILITY_MODE Struktur verweisen.

cbInBuffer

Die Größe des Eingabepuffers in Bytes. Dieser Parameter sollte gleich oder größer als die Größe der WSA_COMPATIBILITY_MODE Struktur sein, auf die durch den lpvInBuffer-Parameter verwiesen wird.

lpvOutBuffer

Ein Zeiger auf den Ausgabepuffer. Dieser Parameter ist für diesen Vorgang nicht verwendet.

cbOutBuffer

Die Größe des Ausgabepuffers in Bytes. Dieser Parameter muss auf Null festgelegt werden.

lpcbBytesReturned

Ein Zeiger auf eine Variable, die die Größe der im Ausgabepuffer gespeicherten Daten in Bytes empfängt. Dieser zurückgegebene Parameter verweist auf einen DWORD-Wert von Null für diesen Vorgang, da keine Ausgabe vorhanden ist.

lpvOverlapped

Ein Zeiger auf eine WSAOVERLAPPED-Struktur .

Wenn Sockets ohne das überlappende Attribut erstellt wurden, wird der lpOverlapped-Parameter ignoriert.

Wenn s mit dem überlappenden Attribut geöffnet wurde und der lpOverlapped-Parameter nicht NULL ist, wird der Vorgang als überlappender (asynchroner) Vorgang ausgeführt. In diesem Fall muss lpOverlapped-Parameter auf eine gültige WSAOVERLAPPED-Struktur verweisen.

Bei überlappenden Vorgängen gibt die WSAIoctl- oder WSPIoctl-Funktion sofort zurück, und die entsprechende Abschlussmethode wird signalisiert, wenn der Vorgang abgeschlossen wurde. Andernfalls wird die Funktion erst zurückgegeben, wenn der Vorgang abgeschlossen wurde oder ein Fehler auftritt.

lpCompletionRoutine

Typ: _In_opt_ LPWSAOVERLAPPED_COMPLETION_ROUTINE

Ein Zeiger auf die Abschlussroutine, die aufgerufen wird, wenn der Vorgang abgeschlossen wurde (ignoriert für nicht überlappende Sockets).

lpThreadId

Ein Zeiger auf eine WSATHREADID-Struktur , die vom Anbieter in einem nachfolgenden Aufruf von WPUQueueApc verwendet werden soll. Der Anbieter sollte die referenzierte WSATHREADID-Struktur (nicht den Zeiger auf denselben) speichern, bis die WPUQueueApc-Funktion zurückgegeben wird.

Hinweis Dieser Parameter gilt nur für die WSPIoctl-Funktion .

lpErrno

Ein Zeiger auf den Fehlercode.

Hinweis Dieser Parameter gilt nur für die WSPIoctl-Funktion .

Rückgabewert

Wenn der Vorgang erfolgreich abgeschlossen ist, gibt die WSAIoctl - oder WSPIoctl-Funktion null zurück.

Wenn der Vorgang fehlschlägt oder aussteht, gibt die WSAIoctl - oder WSPIoctl-FunktionSOCKET_ERROR zurück. Rufen Sie WSAGetLastError auf, um erweiterte Fehlerinformationen abzurufen.

Fehlercode Bedeutung
WSA_IO_PENDING Ein überlappender Vorgang wurde erfolgreich initiiert und der Abschluss wird zu einem späteren Zeitpunkt angegeben.
WSA_OPERATION_ABORTED Ein überlappender Vorgang wurde aufgrund des Schließens des Sockets oder der Ausführung des SIO_FLUSH IOCTL-Befehls abgebrochen.
WSAEFAULT Der lpOverlapped - oder lpCompletionRoutine-Parameter ist nicht vollständig in einem gültigen Teil des Benutzeradressenbereichs enthalten.
WSAEINPROGRESS Die Funktion wird aufgerufen, wenn ein Rückruf ausgeführt wird.
WSAEINTR Ein Blockierungsvorgang wurde unterbrochen.
WSAEINVAL Der dwIoControlCode-Parameter ist kein gültiger Befehl, oder ein angegebener Eingabeparameter ist nicht zulässig, oder der Befehl gilt nicht für den angegebenen Sockettyp. Dieser Fehler wird zurückgegeben, wenn der cbInBuffer-Parameter kleiner als die Größe der WSA_COMPATIBILITY_MODE Struktur ist.
WSAENETDOWN Fehler beim Netzwerk-Subsystem.
WSAENOPROTOOPT Die Socketoption wird im angegebenen Protokoll nicht unterstützt.
WSAENOTCONN Die Sockets sind nicht verbunden.
WSAENOTSOCK Der Deskriptor ist kein Socket.
WSAEOPNOTSUPP Der angegebene IOCTL-Befehl wird nicht unterstützt. Dieser Fehler wird zurückgegeben, wenn die SIO_SET_COMPATIBILITY_MODE IOCTL vom Transportanbieter nicht unterstützt wird. Dieser Fehler wird auch zurückgegeben, wenn ein Versuch, die SIO_SET_COMPATIBILITY_MODE IOCTL zu verwenden, auf einem Datagram-Socket erstellt wird.

Hinweise

die SIO_SET_COMPATIBILITY_MODE IOCTL fordert an, wie der Netzwerkstapel bestimmte Verhaltensweisen behandeln soll, für die sich die Standardart des Verhaltens in Windows Versionen unterscheiden kann. Die Eingabeargumentstruktur für SIO_SET_COMPATIBILITY_MODE wird in der in der Headerdatei "Mswsockdef.h" definierten WSA_COMPATIBILITY_MODE Struktur angegeben. Ein Zeiger auf die WSA_COMPATIBILITY_MODE Struktur wird im cbInBuffer-Parameter übergeben. Diese Struktur wird wie folgt definiert:

// Need to #include <mswsock.h>

/* 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.

Das BehaviorId-Element kann eine der Werte aus dem in der Headerdatei "Mswsockdef.h" definierten WSA_COMPATIBILITY_BEHAVIOR_ID Enumerationstyp sein. 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-Element 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-Element auf einen Wert festgelegt ist, der früher als Windows Vista ist, sind Reduzierungen der TCP-Empfangspuffergröße für diesen Socket mit der option SO_RCVBUF Sockets nach der Verbindungseinrichtung nicht zulässig.
WsaBehaviorAutoTuning Wenn das TargetOsVersion-Element auf einen Wert für Windows Vista oder höher festgelegt ist, wird die automatische Optimierung von Fenstern aktiviert, und der TCP-Fensterskalafaktor wird auf 2 vom Standardwert 8 reduziert. Wenn die TargetOsVersion auf einen Wert festgelegt ist, der älter als Windows Vista ist, wird die automatische Optimierung des Fensters deaktiviert. Die TCP-Fensterskalierungsoption ist ebenfalls deaktiviert, und die maximale größe des empfangenden Empfangsfensters ist auf 65.535 Bytes beschränkt. Die TCP-Fensterskalierungsoption kann nicht für die Verbindung ausgehandelt werden, auch wenn die SO_RCVBUF Socketoption für diesen Socket aufgerufen wurde, der einen Wert größer als 65.535 Bytes angibt, bevor die Verbindung hergestellt wurde.

Das TargetOsVersion-Element kann eine der NTDDI-Versionskonstanten sein, die in der Sdkddkver.h-Headerdatei definiert sind. Einige der möglichen Werte für das TargetOsVersion-Element sind wie folgt:

Begriff BESCHREIBUNG
NTDDI_LONGHORN Das Zielverhalten ist die Standardeinstellung für Windows Vista.
NTDDI_WS03 Das Zielverhalten ist der Standard für Windows Server 2003.
NTDDI_WINXP Das Zielverhalten ist die Standardeinstellung für Windows XP.
NTDDI_WIN2K Das Zielverhalten ist die Standardeinstellung für Windows 2000.

Der primäre Einfluss des TargetOsVersion-Members ist, ob dieses Element auf einen Wert festgelegt ist, der gleich oder größer als NTDDI_LONGHORN ist.

DIE TCP-Leistung hängt nicht nur von der Übertragungsrate selbst ab, sondern eher vom Produkt der Übertragungsrate und der Verzögerungszeit für die Rundreise. Dieses Bandbreitenverzögerungsprodukt misst die Menge der Daten, die das Rohr füllen würden. Dieses Bandbreitenverzögerungsprodukt ist der Pufferraum, der bei Absender und Empfänger erforderlich ist, um den maximalen Durchsatz für die TCP-Verbindung über den Pfad abzurufen. Dieser Pufferraum stellt die Menge an nicht bekannten Daten dar, die TCP verarbeiten muss, um die Pipeline vollständig zu halten. TCP-Leistungsprobleme treten auf, wenn das Bandbreitenverzögerungsprodukt groß ist. Ein Netzwerkpfad, der unter diesen Bedingungen ausgeführt wird, wird häufig als "lange, Fettrohr" bezeichnet. Beispiele sind Hochkapazitäts-Satellitenverbindungen, Hochgeschwindigkeits-Funkverbindungen und terrestrische Glasfaserverbindungen über lange Entfernungen.

Der TCP-Header verwendet ein 16-Bit-Datenfeld (das Fensterfeld im TCP-Paketheader), um die Empfangenfenstergröße an den Absender zu melden. Daher ist das größte Fenster, das verwendet werden kann, 65,535 Bytes. Um diese Einschränkung zu umgehen, wurde eine TCP-Erweiterungsoption für tcp-Fensterskala hinzugefügt, um Windows mit hoher Leistung zu ermöglichen, die größer als 65,535 Bytes sind. Die TCP-Fensterskalierungsoption (WSopt) wird in RFC 1323 auf der IETF-Website definiert. Die WSopt-Erweiterung erweitert die Definition des TCP-Fensters auf 32 Bit, indem ein byte logarithmischer Skalierungsfaktor verwendet wird, um das 16-Bit-Fensterfeld im TCP-Header zu erweitern. Die WSopt-Erweiterung definiert einen impliziten Skalierungsfaktor (2 bis zu einer Leistung), der verwendet wird, um den in einem TCP-Header gefundenen Fenstergröße zu multiplizieren, um die wahre Fenstergröße abzurufen. So würde ein Fensterskalafaktor von 8 zu einer echten Fenstergröße führen, die dem Wert im Fensterfeld im TCP-Header multipliziert wurde, um 2^8 oder 256 multipliziert. Wenn das Fensterfeld in der TCP-Kopfzeile auf den Maximalen Wert von 65.535 Bytes festgelegt wurde und der WSopt-Skalierungsfaktor auf einen Wert von 8 ausgehandelt wurde, wäre die true Fenstergröße 16.776.960 Bytes.

Die true empfangene Fenstergröße und daher wird der Skalierungsfaktor durch den maximalen Empfangpufferraum bestimmt. Dieser maximale Pufferraum ist die Menge der Daten, die ein TCP-Empfänger ermöglicht, einen TCP-Absender zu senden, bevor er auf eine Bestätigung warten muss. Nachdem die Verbindung eingerichtet wurde, wird die Größe des Empfangenfensters in jedem TCP-Segment (das Fensterfeld im TCP-Header) angezeigt. Anzeigen der maximalen Datenmenge, die der Absender senden kann, ist ein empfängerseitiger Flusssteuerungsmechanismus, der verhindert, dass der Absender Daten sendet, die der Empfänger nicht speichern kann. Ein sendener Host kann nur die maximale Anzahl von Daten senden, die vom Empfänger angezeigt werden, bevor sie auf eine Bestätigung und ein Aktualisierungsupdate für das Empfangen von Fenstern warten.

Auf Windows Server 2003 und Windows XP hat der maximale Empfangspufferraum, der die Empfangenfenstergröße für den TCP/IP-Stapel darstellt, einen Standardwert basierend auf der Linkgeschwindigkeit der Sendeschnittstelle. Der tatsächliche Wert passt sich automatisch an sogar Schritte der maximalen Segmentgröße (MSS) an, die während der TCP-Verbindungseinrichtung ausgehandelt wurden. Für einen Link mit 10 Mb/Sec würde die Standardfenstergröße normalerweise auf 16K-Bytes festgelegt werden, während bei einem 100 MBit/sec-Link die Standardfenstergröße auf 65,535 Bytes festgelegt würde.

Auf Windows Server 2003 und Windows XP kann die maximale Empfangensfenstergröße für den TCP/IP-Stapel manuell mit den folgenden Registrierungswerten auf einer bestimmten Schnittstelle oder für das gesamte System konfiguriert werden:

HKEY_LOCAL_MACHINE\SYSTEM\Current Control Set\Services\Tcpip\Parameters\TCPWindowSize

HKEY_LOCAL_MACHINE\SYSTEM\Current Control Set\Services\Tcpip\Parameters\Interface\TCPWindowSize

Der Registrierungswert für TCPWindowSize kann auf maximal 65.535 Bytes festgelegt werden, wenn die WSopt-Erweiterung oder maximal 1.073.741.823 Bytes verwendet werden, wenn die WSopt-Erweiterung verwendet wird (eine maximale Skalierungsfaktor von 4 wird unterstützt). Ohne Fensterskalierung kann eine Anwendung nur einen Durchsatz von ca. 5 Megabits pro Sekunde (Mbps) auf einem Pfad mit einer 100 Millisekunden-Round-Trip-Zeit (RTT) erreichen, unabhängig von der Pfadbandbreite. Dieser Durchsatz kann über ein Gigabit pro Sekunde (Gbps) mit Fensterskalierung skaliert werden, wodurch TCP den Skalierungsfaktor für die Fenstergröße während der Verbindungseinrichtung aushandeln kann.

Auf Windows Server 2003 und Windows XP kann die WSopt-Erweiterung aktiviert werden, indem Sie den folgenden Registrierungswert festlegen.

HKEY_LOCAL_MACHINE\SYSTEM\Current Control Set\Services\Tcpip\Parameters\Tcp1323Opts

Der Tcp1323Opts-Registrierungswert ist ein DWORD-Codiert , sodass die TCP-WSopt-Erweiterung aktiviert ist, wenn Bit 0 festgelegt wird. Wenn Bit 1 festgelegt ist, wird die in RFC 1323 definierte TCP-Timestamp-Option (TSopt) aktiviert. So aktiviert ein Wert von 1 oder 3 die WSopt-Erweiterung.

Auf Windows Server 2003 und Windows XP wird standardmäßig festgelegt, dass die TCPWindowSize- und die Tcp1323Opts-Registrierungswerte nicht erstellt werden. So ist die Standardeinstellung, dass die WSopt-Erweiterung deaktiviert ist und die TCP-Empfangsfenstergröße vom System auf den maximalen Wert von bis zu 65.535 Bytes basierend auf der Linkgeschwindigkeit festgelegt wird. Wenn die Fensterskalierung auf Windows Server 2003 und Windows XP aktiviert ist, indem Sie den Registrierungswert tcp1323Opts festlegen, wird die Fensterskalierung in einer TCP-Verbindung weiterhin verwendet, wenn sowohl der Absender als auch der Empfänger eine TCP-Fensterskalaoption im Syn-Segment enthalten, das aneinander gesendet wird, um einen Fensterskalafaktor zu verhandeln. Wenn die Fensterskalierung in einer Verbindung verwendet wird, wird das Fensterfeld in der TCP-Kopfzeile auf 65.535 Bytes festgelegt, und der Fensterskalafaktor wird verwendet, um die true empfangende Fenstergröße nach oben durch den fensterskala-Faktor anzupassen, der beim Einrichten der Verbindung ausgehandelt wird.

Eine Anwendung kann die TCP-Empfangenfenstergröße für eine Verbindung angeben, indem Sie die SO_RCVBUF Socketoption verwenden. Die TCP-Empfangsfenstergröße für einen Socket kann jederzeit mithilfe von SO_RCVBUF erhöht werden, kann jedoch vor dem Einrichten einer Verbindung nur verringert werden. Um die Fensterskalierung zu verwenden, muss eine Anwendung eine Fenstergröße angeben, die größer als 65.535 Bytes ist, wenn Sie die SO_RCVBUF Socketoption verwenden, bevor die Verbindung eingerichtet wird.

Der ideale Wert für die TCP-Empfangsfenstergröße ist häufig schwierig zu ermitteln. Um die Kapazität des Netzwerks zwischen Dem Absender und Empfänger zu füllen, sollte die Empfangsfenstergröße auf das Bandbreitenverzögerungsprodukt für die Verbindung festgelegt werden, was die Bandbreite ist, die durch die Roundtripzeit multipliziert wird. Selbst wenn eine Anwendung das Bandbreitenverzögerungsprodukt richtig bestimmen kann, ist es noch nicht bekannt, wie schnell die empfangende Anwendung Daten aus dem eingehenden Datenpuffer abruft (die Anwendungs-Abrufrate). Trotz der Unterstützung für die TCP-Fensterskalierung kann die maximale Empfangenfenstergröße in Windows Server 2003 und Windows XP weiterhin den Durchsatz einschränken, da es sich um eine feste maximale Größe für alle TCP-Verbindungen handelt (sofern nicht pro Anwendung mit SO_RCVBUF angegeben), die den Durchsatz für einige Verbindungen verbessern und den Durchsatz für andere verringern kann. Darüber hinaus variiert die feste maximale Empfangensfenstergröße für eine TCP-Verbindung nicht mit den geänderten Netzwerkbedingungen.

Um das Problem der korrekten Bestimmung des Werts der maximalen Empfangenfenstergröße für eine TCP-Verbindung basierend auf den aktuellen Bedingungen des Netzwerks zu beheben, unterstützt der TCP/IP-Stapel in Windows Vista ein Automatisches Optimieren von Fenstern. Wenn dieses Feature aktiviert ist, bestimmt das Automatische Anpassen von Fenstern kontinuierlich die optimale Wahr-Empfangen-Fenstergröße, indem sie das Bandbreitenverzögerungsprodukt und die Anwendungs-Abrufrate messen und die wahre maximale Größe des Empfangensfensters basierend auf ändernden Netzwerkbedingungen anpassen. Die Automatische Optimierung des Fensters ermöglicht standardmäßig die TCP-WSopt-Erweiterung, wodurch bis zu 16.776.960 Bytes für die true Fenstergröße möglich sind. Da die Daten über die Verbindung fließen, überwacht der TCP/IP-Stapel die Verbindung, misst das aktuelle Bandbreitenverzögerungsprodukt für die Verbindung und die Anwendungs empfangene Rate und passt die tatsächliche Empfangsfenstergröße an, um den Durchsatz zu optimieren. Der TCP/IP-Stapel ändert den Wert des Fensterfelds im TCP-Header basierend auf Netzwerkbedingungen, da der WSopt-Skalierungsfaktor beim ersten Einrichten der Verbindung behoben wird.

Der TCP/IP-Stapel in Windows Vista verwendet nicht mehr die TCPWindowSize-Registrierungswerte. Mit einem besseren Durchsatz zwischen TCP-Peers erhöht sich die Auslastung der Netzwerkbandbreite während der Datenübertragung. Wenn alle Anwendungen für den Empfang von TCP-Daten optimiert sind, kann die Gesamtauslastung des Netzwerks erheblich erhöht werden, wodurch die Verwendung von Quality of Service (QoS) auf Netzwerken, die in oder in der Nähe ausgeführt werden, wichtiger wird.

Das Standardverhalten auf Windows Vista für den Empfang von Puffern, wenn SIO_SET_COMPATIBILITY_MODE nicht mit WsaBehaviorReceiveBuffering angegeben wird, ist, dass keine Empfangen von Fenstergrößenminderungen mithilfe SO_RCVBUF Socketoption zulässig sind, nachdem eine Verbindung eingerichtet wurde.

Das Standardverhalten bei Windows Vista für die automatische Optimierung, wenn SIO_SET_COMPATIBILITY_MODE nicht mithilfe von WsaBehaviorAutoTuning angegeben wird, ist, dass der Stapel die automatische Optimierung des Fensters mithilfe eines Fensterskalafaktors von 8 erhält. Beachten Sie, dass wenn eine Anwendung eine gültige Empfangsfenstergröße mit der Option SO_RCVBUF Socket festlegt, wird der Stapel die angegebene Größe verwenden und das automatische Optimieren des Fensters deaktiviert. Windows Autotuning kann auch vollständig mit dem folgenden Befehl deaktiviert werden, netsh interface tcp set global autotuninglevel=disabledin diesem Fall, in dem die Angabe von WsaBehaviorAutoTuning keine Auswirkungen hat. Das Automatische Anpassen von Fenstern kann auch auf Der Grundlage von Gruppenrichtlinien auf Windows Server 2008 deaktiviert werden.

Die Option WsaBehaviorAutoTuning ist auf Windows Vista für einige Internet-Gateway-Geräte und Firewalls erforderlich, die keine korrekten Datenflüsse für TCP-Verbindungen unterstützen, die die WSopt-Erweiterung und einen Windows-Skalierungsfaktor verwenden. Bei Windows Vista verhandelt ein Empfänger standardmäßig einen Fensterskalafaktor von 8 für eine maximale True-Fenstergröße von 16.776.960 Bytes. Wenn Daten mit einem schnellen Link ablaufen, beginnt Windows zunächst mit einer 64 Kilobyte-True-Fenstergröße, indem Sie das Fensterfeld des TCP-Headers auf 256 festlegen und den Fensterskalafaktor auf 8 in den TCP-Optionen festlegen (256*2^8=64 KB). Einige Internet-Gatewaygeräte und Firewalls ignorieren den Fensterskalafaktor, und sehen Sie sich nur das angezeigte Fensterfeld in der tcp-Kopfzeile an, die als 256 angegeben ist, und legen Sie eingehende Pakete für die Verbindung ab, die mehr als 256 Bytes von TCP-Daten enthält. Um die TCP-Empfangsfensterskalierung zu unterstützen, muss ein Gatewaygerät oder eine Firewall den TCP-Handshake überwachen und den ausgehandelten Fensterskalafaktor im Rahmen der TCP-Verbindungsdaten nachverfolgen. Auch einige Anwendungen und TCP-Stapelimplementierungen auf anderen Plattformen ignorieren die TCP-WSopt-Erweiterung und den Fensterskalierungsfaktor. Der Remotehost, der die Daten sendet, kann also Daten mit der im Fensterfeld des TCP-Headers (256 Bytes) angegebenen Rate senden. Dies kann dazu führen, dass Daten sehr langsam vom Empfänger empfangen werden.

Wenn Sie das BehaviorId-Element auf WsaBehaviorAutoTuning festlegen und Die TargetOsVersion auf Windows Vista reduziert den Fensterskalafaktor auf 2, sodass das Fensterfeld in der TCP-Kopfzeile zunächst auf 16,384 Bytes festgelegt ist und der Fensterskalafaktor auf 2 für eine anfängliche true Fenstergröße von 64K-Bytes festgelegt ist. Das Autooptimierungsfeature des Fensters kann dann die Größe des true Fensters auf 262.140 Bytes erhöhen, indem das Fensterfeld im TCP-Header auf 65,535 Bytes festgelegt wird. Eine Anwendung sollte die SIO_SET_COMPATIBILITY_MODE IOCTL festlegen, sobald ein Socket erstellt wird, da diese Option nach dem Senden einer SYN nicht sinnvoll oder angewendet wird. Wenn Sie diese Option festlegen, hat die gleiche Auswirkung wie der folgende Befehl: netsh interface tcp set global autotuninglevel=highlyrestricted

Beachten Sie, dass die Headerdatei mswsockdef.h automatisch in Mswsock.h oder Netiodef.h enthalten ist und nicht direkt verwendet werden sollte.

Siehe auch

Socket

WSAGetLastError

WSAGetOverlappedResult

WSAIoctl

WSAOVERLAPPED

WSASocketA

WSASocketW