elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: ¿Eres nuevo? ¿Tienes dudas acerca del funcionamiento de la comunidad? Lee las Reglas Generales


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Detectar conexion perdida con los sockets
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Detectar conexion perdida con los sockets  (Leído 1,184 veces)
Desiresportal

Desconectado Desconectado

Mensajes: 57


Ver Perfil
Detectar conexion perdida con los sockets
« en: 30 Septiembre 2018, 14:07 pm »

Buenos dias.

Estoy tratando de hacer un programa para conectarse a internet y recibir los datos de una URL por medio de los sockets. Todo programado a lo "bestia". (Usando los sockets directamente sin librerias que me lo faciliten)

El caso es que haciendo pruebas me he dado cuenta que el programa tarda muchisimo en darse cuenta que la conexion se ha perdido. Supongo que eso es bueno para conexiones lentas. Para que la espera prolongada de una respuesta con una conexion lenta no sea sinonimo de desconexion. Pero yo quiero que no tarde tanto. Sobre todo cuando descargo una pagina web desde una URL cuyo header no indica el tamaño de lo que va a descargar.

¿Como detecto la desconexion del socket o la perdida de la conexion del equipo a internet?

Para las pruebas uso ubuntu, programo en C++, uso el comando "select()" para usar sockets no bloqueantes (este comando es totalmente nuevo para mi) y uso el movil para dar wifi al portatil. Para forzar la perdida de conexion del programa apago la zona wifi del movil. Aún no he logrado que esta forma de forzar la desconexion haga que mi programa deje de intentar seguir recibiendo datos. (Lo he dejado en bucle con "select()" y un contador durante mas de 10 minutos. No se ha bloqueado, pero tampoco ha detectado la perdida de la conexion.)

Un saludo y gracias de antemano.


En línea

Desiresportal

Desconectado Desconectado

Mensajes: 57


Ver Perfil
Re: Detectar conexion perdida con los sockets
« Respuesta #1 en: 30 Septiembre 2018, 14:48 pm »

Acabo de programar una solucion al respecto. No es bonita, pero es mejor que no tener nada.

Código:
timeval lastCorrectRecv;
timeval currentTime;
unsigned int timeToLoseConnection;

/* Cuando se detecta que se han leido datos */
gettimeofday(&lastCorrectRecv, NULL);

/* En cada vuelta del bucle que comprueba "select()" */
gettimeofday(&currentTime, NULL);

/* Yo lo uso justo despues de la linea anterior */
if (currentTime.tv_sec - lastCorrectRecv.tv_sec > timeToLoseConnection) {
     // Conexion supuestamente perdida.
}

Por supuesto, tambien hago las comprobaciones de que "select()" confirme la desconexion del socket para no tener que esperar los 120 segundos (2 minutos) que pongo como margen por defecto.

De todos modos. Sigo a la espera de una forma mas limpia y rapida de detectarlo.


PD: Si me he equivocado en algun caracter al escribir, lo siento. Estoy haciendo esto con prisas y con el movil, de modo que se me puede haber colado algo.


En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Ayuda x Perdida de Conexion de Vb6.0 con Vfp6.0
Programación Visual Basic
Luisin 0 1,149 Último mensaje 18 Febrero 2008, 00:50 am
por Luisin
Detectar sockets
Programación Visual Basic
AntonioPalma 2 1,905 Último mensaje 13 Octubre 2011, 20:23 pm
por BlackZeroX
Pérdida de conexión en 127.0.0.1:4001
Dudas Generales
Ume 9 4,343 Último mensaje 12 Agosto 2014, 05:29 am
por MinusFour
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines