SIO_KEEPALIVE_VALS Steuerungs Codes
BESCHREIBUNG
Der " SIO _ KeepAlive _ Vals -Steuerungs Code" aktiviert oder deaktiviert die Einstellung pro Verbindung der TCP-Keep-Alive-Option, die das TCP-Keep-Alive-Timeout und-Intervall angibt.
Um diesen Vorgang auszuführen, wenden Sie die WSAIoctl -oder wspioctl -Funktion mit den folgenden Parametern an.
int WSAIoctl(
(socket) s, // descriptor identifying a socket
SIO_KEEPALIVE_VALS, // dwIoControlCode
(LPVOID) lpvInBuffer, // pointer to tcp_keepalive 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_KEEPALIVE_VALS, // dwIoControlCode
(LPVOID) lpvInBuffer, // pointer to tcp_keepalive 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 Steuerelement Code für den Vorgang. Verwenden Sie für diesen Vorgang den " SIO _ KeepAlive _ Vals ".
lpvinbuffer
Ein Zeiger auf den Eingabepuffer. Dieser Parameter sollte auf eine TCP _ KeepAlive -Struktur zeigen.
cbinbuffer
Die Größe des Eingabe Puffers in Bytes. Dieser Parameter muss größer oder gleich der Größe der TCP _ KeepAlive -Struktur sein, auf die durch den lpvinbuffer -Parameter verwiesen wird.
lpvoutbuffer
Ein Zeiger auf den Ausgabepuffer. Dieser Parameter wird für diesen Vorgang nicht verwendet.
cboutbuffer
Die Größe des Ausgabepuffers in Bytes. Dieser Parameter muss auf 0 (null) festgelegt werden.
lpcbbyteszurück gegeben
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 0 (null) für diesen Vorgang, da keine Ausgabe vorhanden ist.
lpvoverlgetauscht
Ein Zeiger auf eine wsaoverllapp -Struktur.
Wenn Socket s ohne das überlappende Attribut erstellt wurde, wird der lpoverllapp -Parameter ignoriert.
Wenn s mit dem überlappenden Attribut geöffnet wurde und der lpoverlgetauscht -Parameter nicht null ist, wird der Vorgang als überlappende (asynchrone) Operation ausgeführt. In diesem Fall muss der lpoverllapp -Parameter auf eine gültige wsaoverllapp -Struktur zeigen.
Bei überlappenden Vorgängen gibt die Funktion WSAIoctl oder wspioctl sofort zurück, und die entsprechende Vervollständigungs Methode wird signalisiert, wenn der Vorgang abgeschlossen wurde. Andernfalls gibt die Funktion nicht zurück, bis der Vorgang abgeschlossen ist oder ein Fehler auftritt.
lpCompletionRoutine
Typ: _ In_opt _ LPWSAOVERLAPPED_COMPLETION_ROUTINE
Ein Zeiger auf die Vervollständigungs Routine, die aufgerufen wird, wenn der Vorgang abgeschlossen wurde (bei nicht überlappenden Sockets ignoriert).
lpthreadid
Ein Zeiger auf eine wsathreadid -Struktur, die vom Anbieter in einem nachfolgenden wpuqueueapc-Rückruf verwendet werden soll. Der Anbieter sollte die referenzierte wsathreadid -Struktur (nicht den Zeiger auf dieselbe) speichern, bis die wpuqueueapc -Funktion zurückgibt.
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 wird, gibt die WSAIoctl -oder wspioctl -Funktion NULL zurück.
Wenn der Vorgang fehlschlägt oder aussteht, gibt die Funktion WSAIoctl oder wspioctl einen _ Socketfehler zurück. Um erweiterte Fehlerinformationen abzurufen, nennen Sie WSAGetLastError.
| Fehlercode | Bedeutung |
|---|---|
| ausstehende WSA-e/a _ _ | Ein übergebener Vorgang wurde erfolgreich initiiert, und der Abschluss wird zu einem späteren Zeitpunkt angegeben. |
| WSA- _ Vorgang _ abgebrochen | Ein über Lapp ender Vorgang wurde aufgrund der Schließung des Sockets oder der Ausführung des SIO_FLUSH ioctl -Befehls abgebrochen. |
| WSAEFAULT | Der lpoverllapp -oder lpCompletionRoutine -Parameter ist nicht vollständig in einem gültigen Teil des Benutzer Adressraums enthalten. |
| Wsaeingabe Progress | Die-Funktion wird aufgerufen, wenn ein Rückruf ausgeführt wird. |
| Wsaeingabe | Ein Blockierungs Vorgang wurde unterbrochen. |
| Wsaabval | Der dwIoControlCode -Parameter ist kein gültiger Befehl, oder ein angegebener Eingabeparameter ist nicht zulässig, oder der Befehl ist nicht auf den angegebenen Sockettyp anwendbar. |
| WSAENETDOWN | Das Netzwerk Subsystem ist fehlgeschlagen. |
| Wsaumoproumopt | Die Socketoption wird für das angegebene Protokoll nicht unterstützt. Dieser Fehler wird für einen Datagramm-Socket zurückgegeben. |
| Wsaumotsock | Der Deskriptor s ist kein Socket. |
| WSAEOPNOTSUPP | Der angegebene ioctl-Befehl wird nicht unterstützt. Dieser Fehler wird zurückgegeben, wenn der " SIO _ KeepAlive _ Vals ioctl" vom Transportanbieter nicht unterstützt wird. |
Bemerkungen
Der " SIO _ KeepAlive _ Vals ioctl" wird unter Windows 2000 und höheren Versionen des Betriebssystems unterstützt.
Der " SIO _ KeepAlive _ Vals "-Steuerungs Code aktiviert oder deaktiviert die Einstellung pro Verbindung der TCP-Keep-Alive-Option, die das TCP-Keep-Alive-Timeout und das für TCP-Keep-Alive-Pakete verwendete Intervall angibt. Weitere Informationen zur Keep-Alive-Option finden Sie im Abschnitt 4.2.3.6 zu den Anforderungen für Internet Hosts – in RFC 1122 angegebene Kommunikations Schichten auf der IETF-Website. (Diese Ressource ist möglicherweise nur in englischer Sprache verfügbar.)
Der lpvinbuffer -Parameter sollte auf eine TCP- _ KeepAlive -Struktur verweisen, die in der Header Datei " MSTCPIP. h " definiert ist. Diese Struktur ist wie folgt definiert:
/* Argument structure for SIO_KEEPALIVE_VALS */
struct tcp_keepalive {
u_long onoff;
u_long keepalivetime;
u_long keepaliveinterval;
};
Der im ToggleMicrophoneOnOff -Member angegebene Wert bestimmt, ob TCP Keep-Alive aktiviert oder deaktiviert ist. Wenn der ToggleMicrophoneOnOff -Member auf einen Wert ungleich 0 (null) festgelegt ist, wird TCP Keep-Alive aktiviert, und die anderen Elemente in der Struktur werden verwendet. Der "KeepAliveTime" -Member gibt das Timeout (in Millisekunden) ohne Aktivität an, bis das erste Keep-Alive-Paket gesendet wird. Der "KeepAliveInterval" -Member gibt das Intervall (in Millisekunden) zwischen dem Senden von Keep-Alive-Paketen an, wenn keine Bestätigung empfangen wird.
Die Option SO_KEEPALIVE , die eine der SOL_SOCKET Socketoptionenist, kann auch verwendet werden, um den TCP-Keep-Alive-Vorgang für eine Verbindung zu aktivieren oder zu deaktivieren und den aktuellen Status dieser Option abzufragen. Um abzufragen, ob TCP Keep-Alive für einen Socket aktiviert ist, kann die getsockopt-Funktion mit der SO_KEEPALIVE -Option aufgerufen werden. Um TCP Keep-Alive zu aktivieren oder zu deaktivieren, kann die Funktion setsockopt mit der Option SO_KEEPALIVE aufgerufen werden. Wenn TCP Keep-Alive mit SO_KEEPALIVEaktiviert ist, werden die standardmäßigen TCP-Einstellungen für Keep-Alive-Timeout und-Intervall verwendet, es sei denn, diese Werte wurden mithilfe von " SIO _ KeepAlive _ Vals" geändert.
Der standardmäßige systemweite Wert des Keep-Alive-Timeouts ist über die KeepAliveTime -Registrierungs Einstellung steuerbar, die einen Wert in Millisekunden annimmt. Wenn der Schlüssel nicht festgelegt ist, beträgt der Standardwert für Keep-Alive-Timeout 2 Stunden. Der standardmäßige systemweite Wert des Keep-Alive-Intervalls kann durch die keepAliveInterval -Registrierungs Einstellung gesteuert werden, die einen Wert in Millisekunden annimmt. Wenn der Schlüssel nicht festgelegt ist, beträgt das standardmäßige Keep-Alive-Intervall 1 Sekunde.
Unter Windows Vista und höher wird die Anzahl von Keep-Alive-Tests (Neuübertragungen von Daten) auf 10 festgelegt und kann nicht geändert werden.
Unter Windows Server 2003, Windows XP und Windows 2000 ist die Standardeinstellung für die Anzahl von Keep-Alive-Tests 5. Die Anzahl der Keep-Alive-Tests ist über die Registrierungs Einstellungen TcpMaxDataRetransmissions und pptptcpmaxdataretransmissions steuerbar. Die Anzahl der Keep-Alive-Tests wird auf den größeren der beiden Registrierungsschlüssel Werte festgelegt. Wenn diese Zahl 0 ist, werden Keep-Alive-Tests nicht gesendet. Wenn diese Zahl über 255 liegt, wird Sie an 255 angepasst.