Red de conocimiento informático - Material del sitio web - Cómo determinar si websocket está desconectado

Cómo determinar si websocket está desconectado

Método 1:

Cuando el valor de retorno de recv() es menor o igual a 0, la conexión del socket se desconecta. Pero aún queda por determinar si errno es igual a EINTR. Si errno == EINTR, significa que el programa vuelve a la función de recepción después de recibir 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 e información, (socklen _ t *) & len);

if ((info . tcpi _ state == TCP _ establecido)) significa que no está desconectado.

Método tres:

Si usa select y otras funciones del sistema, si el extremo remoto está desconectado, select devuelve 1 y recv devuelve 0 para desconectarse. Otras precauciones son las mismas que las del método 1.

Método 4:

int keepAlive = 1; //Abre el atributo keepalive.

int keepIdle = 60 //Si la conexión no intercambia datos dentro de 60 segundos, detectarlo.

int keep intervalo = 5; //El intervalo de salida durante la detección es de 5 segundos.

int keep count = 3; //El número de intentos de detección. Si el primer paquete de sonda recibe una respuesta, el segundo paquete de sonda no se enviará.

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

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

setsockopt(rs, SOL_TCP, TCP_KEEPINTVL, (void *)& amp; keepInterval, sizeof(mantener intervalo)); rs, SOL_TCP, TCP_KEEPCNT, (void *) & keepCount, sizeof(keep count));

Después de la configuración, si se desconecta la conexión, la lectura y escritura con el socket fallará inmediatamente y devolverá el error ETIMEDOUT.

Método 5:

Implemente usted mismo una 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.