Ver Mensaje Individual
  #1 (permalink)  
Antiguo 25/04/2007, 11:34
abc_
 
Fecha de Ingreso: abril-2007
Mensajes: 2
Antigüedad: 17 años
Puntos: 0
Socket que se cierra tras un tiempo sin recibir datos

Hola a todos:

Tengo una aplicación de chat en la que el cliente está implementado en Java y el servidor en C++. El problema es que cuando el cliente pasa mucho rato (entre 20 y 30 minutos, según mis comprobaciones) sin recibir mensajes, deja de recibirlos. Me explico: tras un tiempo parado, aunque los demás usuarios envien mensajes no llegan; sin embargo, los que este cliente envía sí que llegan a los demás.

La hebra encargada de la lectura se queda bloqueada indefinidamente en el read() y cuando finalmente se reciben datos se produce una excepción "socket closed", por lo que el problema parece ser que el socket se ha cerrado. Sin embargo, ni en el cliente ni en el servidor he programado ese close(). De hecho, el servidor envía los mensajes a este cliente sin detectar que el socket en cuestión se haya cerrado.

He estado leyendo sobre sockets, pero en ningún sitio he visto nada que haga referencia a la posibilidad de que un socket se cierre "solo" (tal vez por cuestiones de seguridad, o que lo haga el sistema operativo (las pruebas las estoy haciendo sobre windows xp)?)...

Es posible que si pasa un cierto tiempo sin recibir datos, el socket se cierre?
¿Este comportamiento es normal? ¿Cómo lo evito?

También he probado a ver el estado del socket con las funciones getSoTimeOut(), isConnected(), isClosed(), isInputShutDown()... y todas indican que el socket está bien. También he probado a activar la opción keepAlive con setKeepAlive(true), pero tampoco ha dado resultado.

¿Alguien tiene alguna sugerencia?