SO_KEEPALIVE opción de socket

La opción de socket SO_KEEPALIVE está diseñada para permitir que una aplicación habilite paquetes de conexión.

Para consultar el estado de esta opción de socket, llame a la función getsockopt . Para establecer esta opción, llame a la función setsockopt con los parámetros siguientes.

Valor de opción de socket

La constante que representa esta opción de socket es 0x0008.

Sintaxis

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
);

Parámetros

s [in]

Descriptor que identifica el socket.

level [in]

Nivel en el que se define la opción. Use SOL_SOCKET para esta operación.

optname [in]

Opción de socket para la que se va a establecer el valor. Use SO_KEEPALIVE para esta operación.

optval [out]

Puntero al búfer que contiene el valor de la opción que se va a establecer. Este parámetro debe apuntar al búfer igual o mayor que el tamaño de un valor DWORD .

Este valor se trata como un valor booleano con 0 que se usa para indicar FALSE (deshabilitado) y un valor distinto de cero para indicar TRUE (habilitado).

optlen [in]

Tamaño, en bytes, del búfer optval . Este tamaño debe ser igual o mayor que el tamaño de un valor DWORD .

Valor devuelto

Si la operación se completa correctamente, setsockopt devuelve cero.

Si se produce un error en la operación, se devuelve un valor de SOCKET_ERROR y se puede recuperar un código de error específico llamando a WSAGetLastError.

Código de error Significado
WSANOTINITIALISED
Debe producirse una llamada de WSAStartup correcta antes de usar esta función.
WSAENETDOWN
Error en el subsistema de red.
WSAEFAULT
Uno de los parámetros optval o optlen apunta a la memoria que no está en una parte válida del espacio de direcciones del usuario. Este error también se devuelve si el valor al que apunta el parámetro optlen es menor que el tamaño de un valor DWORD .
WSAEINPROGRESS
Una llamada a Windows Sockets 1.1 está en curso o el proveedor de servicios sigue procesando una función de devolución de llamada.
WSAEINVAL
El parámetro level es desconocido o no válido. En Windows Vista y versiones posteriores, este error también se devuelve si el socket estaba en un estado transitorio.
WSAENOPROTOOPT
La opción es desconocida o no admitida por la familia de protocolos indicada. Este error se devuelve si el descriptor de socket pasado en el parámetro s era para un socket de datagrama.
WSAENOTSOCK
El descriptor no es un socket.

 

Comentarios

La función getockopt llamada con la opción de socket SO_KEEPALIVE permite a una aplicación recuperar el estado actual de la opción keepalive, aunque esta característica no se usa normalmente. Si una aplicación necesita habilitar paquetes keepalive en un socket, solo llama a la función setsockopt para habilitar la opción.

La función setsockopt llamada con la opción de socket SO_KEEPALIVE permite que una aplicación habilite paquetes de conexión de socket. La opción SO_KEEPALIVE para un socket está deshabilitada (establecida en FALSE) de forma predeterminada.

Cuando esta opción de socket está habilitada, la pila TCP envía paquetes de mantenimiento activo cuando no se han recibido paquetes de confirmación o datos para la conexión dentro de un intervalo. Para obtener más información sobre la opción keep-alive, consulte la sección 4.2.3.6 en requisitos para hosts de Internet: capas de comunicación especificadas en RFC 1122 disponible en el sitio web de IETF. (Este recurso solo puede estar disponible en inglés).

La opción de socket SO_KEEPALIVE solo es válida para los protocolos que admiten la noción de protocolos de mantenimiento activo (protocolos orientados a conexiones). Para TCP, el tiempo de espera de mantenimiento predeterminado es de 2 horas y el intervalo de mantenimiento activo es de 1 segundo. El número predeterminado de sondeos de mantenimiento activo varía en función de la versión de Windows.

El código de control SIO_KEEPALIVE_VALS se puede usar para habilitar o deshabilitar keep-alive y ajustar el tiempo de espera y el intervalo para una sola conexión. Si keep-alive está habilitado con SO_KEEPALIVE, la configuración de TCP predeterminada se usa para el tiempo de espera y el intervalo de mantenimiento activo, a menos que estos valores se hayan cambiado mediante SIO_KEEPALIVE_VALS.

El valor predeterminado en todo el sistema del tiempo de espera de mantenimiento se puede controlar a través de la configuración del registro KeepAliveTime que toma un valor en milisegundos. El valor predeterminado de todo el sistema del intervalo keep-alive se puede controlar a través de la configuración del Registro KeepAliveInterval que toma un valor en milisegundos.

En Windows Vista y versiones posteriores, el número de sondeos de mantenimiento activo (retransmisiones de datos) se establece en 10 y no se puede cambiar.

En Windows Server 2003, Windows XP y Windows 2000, la configuración predeterminada para el número de sondeos de mantenimiento activo es 5. El número de sondeos keep-alive se puede controlar a través de la configuración del Registro TcpMaxDataRetransmissions y PPTPTcpMaxDataRetransmissions . El número de sondeos de mantenimiento activo se establece en el mayor de los dos valores de clave del Registro. Si este número es 0, no se enviarán sondeos de mantenimiento activo. Si este número es superior a 255, se ajusta a 255.

En Windows Vista y versiones posteriores, la opción de socket SO_KEEPALIVE solo se puede establecer mediante la función setsockopt cuando el socket está en un estado conocido no es un estado transitorio. Para TCP, se debe establecer la opción de socket SO_KEEPALIVE antes de que se llame a la función connect (connect, ConnectEx, WSAConnect, WSAConnectByList o WSAConnectByName) o una vez completada la solicitud de conexión. Si se llamó a la función connect de forma asincrónica, esto requiere esperar a la finalización de la conexión antes de intentar establecer la opción de socket SO_KEEPALIVE . Si una aplicación intenta establecer la opción de socket SO_KEEPALIVE cuando una solicitud de conexión todavía está en proceso, se producirá un error en la función setsockopt y se devolverá WSAEINVAL.

En Windows Server 2003, Windows XP y Windows 2000, la opción de socket SO_KEEPALIVE se puede establecer mediante la función setsockopt cuando el socket es un estado transitorio (una solicitud de conexión sigue en curso), así como un estado conocido.

Tenga en cuenta que el archivo de encabezado Ws2def.h se incluye automáticamente en Winsock2.h y nunca se debe usar directamente.

Requisitos

Requisito Value
Cliente mínimo compatible
Windows 2000 Professional [solo aplicaciones de escritorio]
Servidor mínimo compatible
Windows 2000 Server [solo aplicaciones de escritorio]
Encabezado
Ws2def.h (incluya Winsock2.h)

Consulte también

getsockopt

setsockopt

KeepAliveTime

KeepAliveInterval

PPTPTcpMaxDataRetransmissions

socket

SIO_KEEPALIVE_VALS

TcpMaxDataRetransmissions

WSAGetLastError