SO_KEEPALIVE Socketoption
Die Socketoption SO_KEEPALIVE ist so konzipiert, dass eine Anwendung Keep-Alive-Pakete für eine Socketverbindung aktivieren kann.
Rufen Sie die funktion getsockopt auf, um die status dieser Socketoption abzufragen. Um diese Option festzulegen, rufen Sie die setockopt-Funktion mit den folgenden Parametern auf.
Wert der Socketoption
Die Konstante, die diese Socketoption darstellt, ist 0x0008.
Syntax
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.
-
Level [in]
-
Die Ebene, auf der die Option definiert ist. Verwenden Sie für diesen Vorgang SOL_SOCKET .
-
optname [in]
-
Die Socketoption, für die der Wert festgelegt werden soll. Verwenden Sie für diesen Vorgang SO_KEEPALIVE .
-
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 der Größe eines DWORD-Werts entspricht oder größer ist.
Dieser Wert wird als boolescher Wert behandelt, wobei 0 verwendet wird, um FALSE (deaktiviert) anzugeben, und ein Wert ungleich null, um TRUE (aktiviert) anzugeben.
-
optlen [in]
-
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 wird, gibt setsockopt null zurück.
Wenn der Vorgang fehlschlägt, wird der Wert SOCKET_ERROR zurückgegeben, und ein bestimmter Fehlercode kann durch Aufrufen von WSAGetLastError abgerufen 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 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 verweist, kleiner als die Größe eines DWORD-Werts ist. |
|
Ein blockierter Windows Sockets 1.1-Aufruf wird ausgeführt, oder der Dienstanbieter verarbeitet weiterhin eine Rückruffunktion. |
|
Der level-Parameter ist unbekannt oder ungültig. Unter 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 Socketdeskriptor, der im s-Parameter übergeben wurde, für einen Datagrammsocket war. |
|
Der Deskriptor ist kein Socket. |
Hinweise
Die getockopt-Funktion , die mit der Option SO_KEEPALIVE Socket aufgerufen wird, ermöglicht es einer Anwendung, den aktuellen Zustand der Keepalive-Option abzurufen, obwohl dieses Feature normalerweise nicht verwendet wird. Wenn eine Anwendung Keepalive-Pakete für einen Socket aktivieren muss, ruft sie nur die setockopt-Funktion auf , um die Option zu aktivieren.
Die setockopt-Funktion , die mit der Option SO_KEEPALIVE Socket aufgerufen wird, ermöglicht es einer Anwendung, Keep-Alive-Pakete für eine Socketverbindung zu aktivieren. Die Option SO_KEEPALIVE 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 unter Anforderungen für Internethosts – Kommunikationsebenen gemäß RFC 1122 auf der IETF-Website. (Diese Ressource ist möglicherweise nur in Englisch verfügbar.)
Die Option SO_KEEPALIVE Sockets ist nur für Protokolle gültig, die das Konzept von Keep-Alive (verbindungsorientierte Protokolle) unterstützen. Bei 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 Steuercode kann verwendet werden, um Keep-Alive zu aktivieren oder zu deaktivieren und das Timeout und das 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 mithilfe von SIO_KEEPALIVE_VALS geändert.
Der systemweite Standardwert des Keep-Alive-Timeouts kann über die Registrierungseinstellung KeepAliveTime gesteuert werden, die einen Wert in Millisekunden benötigt. Der systemweite Standardwert des Keep-Alive-Intervalls kann über die Registrierungseinstellung KeepAliveInterval gesteuert werden, die einen Wert in Millisekunden benötigt.
Unter Windows Vista und höher ist die Anzahl der Keep-Alive-Tests (Datenneuübertragungen) 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 der 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 keep-alive-Tests nicht gesendet. Wenn diese Zahl über 255 liegt, wird sie auf 255 angepasst.
Unter Windows Vista und höher kann die Socketoption SO_KEEPALIVE nur mit der setockopt-Funktion festgelegt werden, wenn sich der Socket in einem bekannten Zustand und nicht in einem Übergangszustand befindet. Für TCP sollte die SO_KEEPALIVE Socketoption festgelegt werden, bevor die Verbindungsfunktion (connect, ConnectEx, WSAConnect, WSAConnectByList oder WSAConnectByName) aufgerufen wird oder nachdem die Verbindungsanforderung tatsächlich abgeschlossen wurde. Wenn die Verbindungsfunktion asynchron aufgerufen wurde, müssen Sie auf den Verbindungsabschluss warten, bevor Sie versuchen, die Socketoption SO_KEEPALIVE festzulegen. Wenn eine Anwendung versucht, die Option SO_KEEPALIVE Socket festzulegen, während eine Verbindungsanforderung noch ausgeführt wird, schlägt die setockopt-Funktion fehl und gibt WSAEINVAL zurück.
Unter Windows Server 2003, Windows XP und Windows 2000 kann die SO_KEEPALIVE Socketoption mit der Setockopt-Funktion festgelegt werden, wenn der Socket ein Übergangszustand (eine Verbindungsanforderung wird noch ausgeführt) sowie ein bekannter Zustand ist.
Beachten Sie, dass die Ws2def.h-Headerdatei 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 |
|