SO _ KEEPALIVE-Socketoption
Die SO _ KEEPALIVE-Socketoption ist so konzipiert, dass eine Anwendung Keep-Alive-Pakete für eine Socketverbindung aktivieren kann.
Um den Status dieser Socketoption abzufragen, rufen Sie die getsockopt-Funktion auf. Um diese Option festzulegen, rufen Sie die setsockopt-Funktion mit den folgenden Parametern auf.
Wert der Socketoption
Die Konstante, die diese Socketoption darstellt, ist 0x0008.
Syntax
int getsockopt(
(SOCKET) s, // descriptor identifying a socket
(int) SOL_SOCKET, // level
(int) SO_KEEPALIVE, // optname
(char *) optval, // output buffer,
(int) optlen, // size of output buffer
);
int setsockopt(
(SOCKET) s, // descriptor identifying a socket
(int) SOL_SOCKET, // level
(int) SO_KEEPALIVE, // optname
(char *) optval, // input buffer,
(int) optlen, // size of input buffer
);
Parameter
-
s [ in]
-
Ein Deskriptor, der den Socket identifiziert.
-
Ebene [ In]
-
Die Ebene, auf der die Option definiert ist. Verwenden Sie SOL _ SOCKET für diesen Vorgang.
-
optname [ In]
-
Die Socketoption, für die der Wert festgelegt werden soll. Verwenden Sie SO _ KEEPALIVE für diesen Vorgang.
-
optval [ out]
-
Ein Zeiger auf den Puffer, der den Wert für die festzulegende Option enthält. Dieser Parameter sollte auf einen Puffer zeigen, der gleich oder größer als die Größe eines DWORD-Werts ist.
Dieser Wert wird als boolescher Wert behandelt, wobei 0 zum Angeben von FALSE (deaktiviert) und ein Wert ungleich 0 (null) verwendet wird, um TRUE (aktiviert) anzugeben.
-
optlen [ in, out]
-
Ein Zeiger auf die Größe des optval-Puffers in Bytes. Diese Größe muss gleich oder größer als die Größe eines DWORD-Werts sein.
Rückgabewert
Wenn der Vorgang erfolgreich abgeschlossen wurde, gibt setsockopt 0 (null) zurück.
Wenn der Vorgang fehlschlägt, wird der Wert SOCKET _ ERROR zurückgegeben, und ein bestimmter Fehlercode kann durch Aufrufen von WSAGetLastErrorabgerufen werden.
| Fehlercode | Bedeutung |
|---|---|
| Vor der Verwendung dieser Funktion muss ein erfolgreicher WSAStartup-Aufruf erfolgen. |
|
| Fehler beim Netzwerksubsystem. |
|
| Einer der optval- oder optlen-Parameter verweist auf den Arbeitsspeicher, der sich nicht in einem gültigen Teil des Benutzeradressraums befindet. Dieser Fehler wird auch zurückgegeben, wenn der Wert, auf den der optlen-Parameter zeigt, kleiner als die Größe eines DWORD-Werts ist. |
|
| Ein blockierende Windows Sockets 1.1-Aufruf wird ausgeführt, oder der Dienstanbieter verarbeitet weiterhin eine Rückruffunktion. |
|
| Der level-Parameter ist unbekannt oder ungültig. Bei Windows Vista und höher wird dieser Fehler auch zurückgegeben, wenn sich der Socket in einem Übergangszustand befand. |
|
| Die Option ist unbekannt oder wird von der angegebenen Protokollfamilie nicht unterstützt. Dieser Fehler wird zurückgegeben, wenn der im s-Parameter übergebene Socketdeskriptor für einen Datagrammsocket verwendet wurde. |
|
| Der Deskriptor ist kein Socket. |
Hinweise
Die getsockopt-Funktion, die mit der SO _ KEEPALIVE-Socketoption aufgerufen wird, ermöglicht einer Anwendung, den aktuellen Zustand der Keepalive-Option abzurufen, obwohl diese Funktion normalerweise nicht verwendet wird. Wenn eine Anwendung Keepalive-Pakete auf einem Socket aktivieren muss, ruft sie nur die setsockopt-Funktion auf, um die Option zu aktivieren.
Die mit der Socketoption SO _ KEEPALIVE aufgerufene Setsockopt-Funktion ermöglicht einer Anwendung, Keep-Alive-Pakete für eine Socketverbindung zu aktivieren. Die SO _ KEEPALIVE-Option für einen Socket ist standardmäßig deaktiviert (auf FALSE festgelegt).
Wenn diese Socketoption aktiviert ist, sendet der TCP-Stapel Keep-Alive-Pakete, wenn innerhalb eines Intervalls keine Daten- oder Bestätigungspakete für die Verbindung empfangen wurden. Weitere Informationen zur Keep-Alive-Option finden Sie im Abschnitt 4.2.3.6 zu den Anforderungen für Internethosts – In RFC 1122 angegebene Kommunikationsebenen, die auf der IETF-Websiteverfügbar sind. (Diese Ressource ist möglicherweise nur auf Englisch verfügbar.)
Die SO _ KEEPALIVE-Socketoption ist nur für Protokolle gültig, die das Konzept von Keep-Alive (verbindungsorientierte Protokolle) unterstützen. Für TCP beträgt das standardmäßige Keep-Alive-Timeout 2 Stunden und das Keep-Alive-Intervall 1 Sekunde. Die Standardanzahl von Keep-Alive-Tests variiert je nach Version von Windows.
Der SIO_KEEPALIVE_VALS Steuerelementcode kann verwendet werden, um Keep-Alive zu aktivieren oder zu deaktivieren und das Timeout und Intervall für eine einzelne Verbindung anzupassen. Wenn Keep-Alive mit SO _ KEEPALIVE aktiviert ist, werden die TCP-Standardeinstellungen für Keep-Alive-Timeout und -Intervall verwendet, es sei denn, diese Werte wurden mit SIO _ KEEPALIVE _ VALS geändert.
Der systemweite Standardwert des Keep-Alive-Timeouts kann über die KeepAliveTime-Registrierungseinstellung gesteuert werden, die einen Wert in Millisekunden annimmt. Der systemweite Standardwert des Keep-Alive-Intervalls kann über die Registrierungseinstellung KeepAliveInterval gesteuert werden, die einen Wert in Millisekunden annimmt.
Auf Windows Vista und höher ist die Anzahl der Keep-Alive-Tests (Datenweiterübertragungen) auf 10 festgelegt und kann nicht geändert werden.
Auf 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 kann über die Registrierungseinstellungen TcpMaxDataRetransmissions und PPTPTcpMaxDataRetransmissions gesteuert werden. Die Anzahl der Keep-Alive-Tests wird auf den größeren der beiden Registrierungsschlüsselwerte festgelegt. Wenn diese Zahl 0 ist, werden keine Keep-Alive-Tests gesendet. Wenn diese Zahl über 255 liegt, wird sie auf 255 angepasst.
Auf Windows Vista und höher kann die SO _ KEEPALIVE-Socketoption nur mithilfe der Setsockopt-Funktion festgelegt werden, wenn sich der Socket in einem bekannten Zustand befindet und nicht in einem Übergangszustand. Für TCP sollte die SO _ KEEPALIVE-Socketoption festgelegt werden, bevor die connect-Funktion (connect, ConnectEx, WSAConnect, WSAConnectByListoder WSAConnectByName) aufgerufen wird oder nachdem die Verbindungsanforderung tatsächlich abgeschlossen wurde. Wenn die connect-Funktion asynchron aufgerufen wurde, muss auf den Verbindungsabschluss gewartet werden, bevor versucht wird, die SO _ KEEPALIVE-Socketoption festzulegen. Wenn eine Anwendung versucht, die SO _ KEEPALIVE-Socketoption festzulegen, wenn eine Verbindungsanforderung noch verarbeitet wird, schlägt die Setsockopt-Funktion fehl und gibt WSAEINVALzurück.
Auf Windows Server 2003, Windows XP und Windows 2000 kann die SO _ KEEPALIVE-Socketoption mithilfe der setsockopt-Funktion festgelegt werden, wenn der Socket ein Übergangszustand (eine Verbindungsanforderung wird noch ausgeführt) sowie ein bekannter Zustand ist.
Beachten Sie, dass die Headerdatei Ws2def.h automatisch in Winsock2.h enthalten ist und niemals direkt verwendet werden sollte.
Anforderungen
| Anforderung | Wert |
|---|---|
| Unterstützte Mindestversion (Client) |
Windows 2000 Professional [nur Desktop-Apps] |
| Unterstützte Mindestversion (Server) |
Windows 2000 Server [nur Desktop-Apps] |
| Header |
|