Ver Mensaje Individual
  #1  
Antiguo 28-05-2010
mcs mcs is offline
Miembro
 
Registrado: may 2007
Ubicación: Girona
Posts: 229
Reputación: 18
mcs Va por buen camino
Como evitar el Asynchronous socket error?

Buenos días,

Tengo una aplicación que se comunica con un dispositivo a través de sockets. Para la comunicación uso el TClientSocket. En general funciona todo correctamente, a excepción de cuando hay algún problema de comunicación (dirección IP incorrecta, dispositivo apagado, timeout, etc).

Todos estos problemas los puedo capturar. Cuando ocurren, aviso al usuario mediante un mensaje, y procedo a cerrar la conexión del TClientSocket, con el método Close. Aparentemente se cierra el socket, pero unos segundos después, empiezan a aparecer (cada 5 o 10 segundos) ventanas con el mensaje "Asynchronous socket error 10060", error de Windows que indica que el socket ha hecho un timeout.

Por tanto, no sé si es que realmente no se cierra el socket cuando se lo pido, o que lo enviado queda en alguna cola del Windows cómo pendiente. Y claro, es muy molesto que cuando fallan las comunicaciones salgan errores de Windows (y si no se cierra la aplicación, no se puede volver a comunicar).

Y mi pregunta es: que puedo hacer para evitar estos errores? El TClientSocket lo tengo configurado en "nonBlocking". Quizá mejor cambiar y usar algun componente de las Indy? Continuar con el TClientSocket pero usandolo en modo bloqueante?

Cualquier ayuda/recomendación será bienvenida!

Saludos,

Marc

Última edición por mcs fecha: 28-05-2010 a las 08:50:51.
Responder Con Cita