opzione socket SO_KEEPALIVE
L'opzione SO_KEEPALIVE socket è progettata per consentire a un'applicazione di abilitare pacchetti keep-alive per una connessione socket.
Per eseguire una query sullo stato di questa opzione socket, chiamare la funzione getsockopt . Per impostare questa opzione, chiamare la funzione setockopt con i parametri seguenti.
Valore dell'opzione socket
La costante che rappresenta questa opzione socket è 0x0008.
Sintassi
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
);
Parametri
-
s [in]
-
Descrittore che identifica il socket.
-
livello [in]
-
Livello a cui viene definita l'opzione. Usare SOL_SOCKET per questa operazione.
-
optname [in]
-
Opzione socket per cui è necessario impostare il valore. Usare SO_KEEPALIVE per questa operazione.
-
optval [out]
-
Puntatore al buffer contenente il valore per l'opzione da impostare. Questo parametro deve puntare al buffer uguale o maggiore rispetto alle dimensioni di un valore DWORD .
Questo valore viene considerato come valore booleano con 0 usato per indicare FALSE (disabilitato) e un valore diverso da zero per indicare TRUE (abilitato).
-
optlen [in]
-
Dimensioni, in byte, del buffer optval . Questa dimensione deve essere uguale o maggiore della dimensione di un valore DWORD .
Valore restituito
Se l'operazione viene completata correttamente, setockopt restituisce zero.
Se l'operazione ha esito negativo, viene restituito un valore di SOCKET_ERROR e un codice di errore specifico può essere recuperato chiamando WSAGetLastError.
Codice di errore | Significato |
---|---|
Prima di usare questa funzione, è necessario eseguire una chiamata WSAStartup riuscita. |
|
Il sottosistema di rete non è riuscito. |
|
Uno dei parametri optval o optlen punta alla memoria che non si trova in una parte valida dello spazio degli indirizzi utente. Questo errore viene restituito anche se il valore puntato dal parametro optlen è minore delle dimensioni di un valore DWORD . |
|
Una chiamata windows Sockets 1.1 bloccata è in corso oppure il provider di servizi sta ancora elaborando una funzione di callback. |
|
Il parametro di livello è sconosciuto o non valido. In Windows Vista e versioni successive, questo errore viene restituito anche se il socket era in uno stato di transizione. |
|
L'opzione è sconosciuta o non supportata dalla famiglia di protocolli indicata. Questo errore viene restituito se il descrittore del socket passato nel parametro s era per un socket di datagram. |
|
Il descrittore non è un socket. |
Commenti
La funzione getsockopt chiamata con l'opzione socket SO_KEEPALIVE consente a un'applicazione di recuperare lo stato corrente dell'opzione keepalive, anche se questa funzionalità non viene utilizzata normalmente. Se un'applicazione deve abilitare i pacchetti keepalive in un socket, chiama solo la funzione setockopt per abilitare l'opzione.
La funzione setockopt chiamata con l'opzione socket SO_KEEPALIVE consente a un'applicazione di abilitare pacchetti keep-alive per una connessione socket. L'opzione SO_KEEPALIVE per un socket è disabilitata (impostata su FALSE) per impostazione predefinita.
Quando questa opzione socket è abilitata, lo stack TCP invia pacchetti keep-alive quando non sono stati ricevuti pacchetti di dati o di riconoscimento per la connessione entro un intervallo. Per altre informazioni sull'opzione keep-alive, vedere la sezione 4.2.3.6 sui requisiti per gli host Internet: livelli di comunicazione specificati in RFC 1122 disponibili nel sito Web IETF. Questa risorsa può essere disponibile solo in inglese.
L'opzione socket SO_KEEPALIVE è valida solo per i protocolli che supportano la nozione di keep-alive (protocolli orientati alla connessione). Per TCP, il timeout keep-alive predefinito è 2 ore e l'intervallo keep-alive è 1 secondo. Il numero predefinito di probe keep-alive varia in base alla versione di Windows.
Il codice di controllo SIO_KEEPALIVE_VALS può essere usato per abilitare o disabilitare keep-alive e regolare il timeout e l'intervallo per una singola connessione. Se keep-alive è abilitato con SO_KEEPALIVE, le impostazioni TCP predefinite vengono usate per il timeout keep-alive e l'intervallo, a meno che questi valori non siano stati modificati usando SIO_KEEPALIVE_VALS.
Il valore predefinito del timeout keep-alive è controllabile tramite l'impostazione del Registro di sistema KeepAliveTime che accetta un valore in millisecondi. Il valore predefinito a livello di sistema dell'intervallo keep-alive è controllabile tramite l'impostazione del Registro di sistema KeepAliveInterval che accetta un valore in millisecondi.
In Windows Vista e versioni successive il numero di probe keep-alive (ritrasmissioni dati) è impostato su 10 e non può essere modificato.
In Windows Server 2003, Windows XP e Windows 2000, l'impostazione predefinita per il numero di probe keep-alive è 5. Il numero di probe keep-alive è controllabile tramite le impostazioni del Registro di sistema TcpMaxDataRetransmissions e PPTPTcpMaxDataRetransmissions . Il numero di probe keep-alive è impostato sul valore maggiore dei due valori della chiave del Registro di sistema. Se questo numero è 0, i probe keep-alive non verranno inviati. Se questo numero è superiore a 255, viene modificato su 255.
In Windows Vista e versioni successive, l'opzione socket SO_KEEPALIVE può essere impostata solo usando la funzione setockopt quando il socket si trova in uno stato noto non uno stato di transizione. Per TCP, l'opzione socket SO_KEEPALIVE deve essere impostata prima della funzione di connessione (connect, ConnectEx, WSAConnectByList o WSAConnectByName) o dopo il completamento della richiesta di connessione. Se la funzione di connessione è stata chiamata in modo asincrono, questa operazione richiede l'attesa del completamento della connessione prima di provare a impostare l'opzione socket SO_KEEPALIVE . Se un'applicazione tenta di impostare l'opzione socket SO_KEEPALIVE quando una richiesta di connessione è ancora in corso, la funzione setockopt avrà esito negativo e restituirà WSAEINVAL.
In Windows Server 2003, Windows XP e Windows 2000 , l'opzione SO_KEEPALIVE socket può essere impostata usando la funzione setockopt quando il socket è uno stato di transizione (una richiesta di connessione è ancora in corso) e uno stato noto.
Si noti che il file di intestazione Ws2def.h viene incluso automaticamente in Winsock2.h e non deve mai essere usato direttamente.
Requisiti
Requisito | Valore |
---|---|
Client minimo supportato |
Windows 2000 Professional [solo app desktop] |
Server minimo supportato |
Windows 2000 Server [solo app desktop] |
Intestazione |
|