Red de conocimiento informático - Problemas con los teléfonos móviles - Cómo determinar si la conexión websocket está desconectada

Cómo determinar si la conexión websocket está desconectada

Método 1:

Cuando el valor devuelto por recv() es menor o igual a 0, indica que la conexión del socket está desconectada. Pero también debe determinar si errno es igual a EINTR. Si errno == EINTR, significa que la función recv regresa después de que el programa recibe la señal, la conexión del socket aún es normal y la conexión del socket no debe cerrarse.

Método 2:

struct tcp_info info;

int len=sizeof(info);

getsockopt(sock, IPPROTO_TCP, TCP_INFO , amp;info, (socklen_t *)amp;len);

getsockopt(sock, IPPROTO_TCP, TCP_INFO, amp;info, (socklen_t *)amp;len);

Esto Está cerrando la conexión del socket por primera vez. amp; len);

if((info.tcpi_state===TCP_ESTABLISHED)) significa que la conexión no está desconectada; de lo contrario, significa que la conexión está desconectada

Método 3:

Si está utilizando una función del sistema (como seleccionar) y si el extremo remoto se desconecta, seleccionar devolverá 1 y recv devolverá 0 para desconectarse. Otras precauciones son las mismas que las del método uno.

Método 4:

int keepAlive = 1; // Habilita el atributo keepalive

int keepIdle = 60 // Si la conexión no tiene ningún dato. dentro de 60 segundos, luego realice la detección

int keepInterval = 5; // El tiempo para enviar paquetes de datos durante la detección. 5 segundos

int keepCount = 3; // Número de intentos de detección. Si se recibe una respuesta para la primera sonda, las dos sondas siguientes no se envían.

setsockopt(rs, SOL_SOCKET, SO_KEEPALIVE, (void *)amp; keepAlive, sizeof(keepAlive));

setsockopt(rs, SOL_TCP, TCP_KEEPIDLE, (void*)amp; keepIdle, sizeof(keepIdle));

setsockopt(rs, SOL_TCP, TCP_KEEPINTVL, (void *)amp; keepInterval, sizeof(keepInterval));

setsockopt(rs, SOL_TCP, TCP_KEEPCNT, (void *)&keepCount, sizeof(keepCount));

Después de la configuración, si la conexión se desconecta, el socket no se puede usar para operaciones de lectura o escritura inmediatamente y se devuelve un error ETIMEDOUT

Método 5:

Implemente usted mismo la detección de latidos. Si no se recibe un paquete de latidos personalizado dentro de un cierto período de tiempo, se marcará como desconectado.