Share via


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
WSANOTINITIALISED
Prima di usare questa funzione, è necessario eseguire una chiamata WSAStartup riuscita.
WSAENETDOWN
Il sottosistema di rete non è riuscito.
WSAEFAULT
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 .
WSAEINPROGRESS
Una chiamata windows Sockets 1.1 bloccata è in corso oppure il provider di servizi sta ancora elaborando una funzione di callback.
WSAEINVAL
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.
WSAENOPROTOOPT
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.
WSAENOTSOCK
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
Ws2def.h (include Winsock2.h)

Vedi anche

getsockopt

Setsockopt

KeepAliveTime

KeepAliveInterval

PPTPTcpMaxDataRetransmissions

Socket

SIO_KEEPALIVE_VALS

TcpMaxDataRetransmissions

WSAGetLastError