30/01/2008, 06:47
|
| | Fecha de Ingreso: octubre-2003
Mensajes: 3.578
Antigüedad: 21 años, 3 meses Puntos: 51 | |
Re: Gurus sobre Sockets - Detectar conexion perdida. Lo mejor es que te olvides del metodo available(), ya que no devuelve el numero total de bytes que hay para leer.
Lo habitual es leer mientras te haya devuelto algo, con un "buffer" de tamaño pre-establecido.
Crear el array de bytes "justo" no tiene mucho sentido ya que cada llamada read puede llegar con un tamaño distinto (depende del trafico de red etc.). Es decir, si un extremo envia 2048 bytes, nada garantiza que al otro lado se reciban los 2048 de golpe, que available devuelva 2048 o que puedas leerlos solo con un read(). La red es así.
Lo de que no te lance la excepcion cuando cortes las comunicaciones ahora mismo no me queda claro por que pasa, pero posiblemente sea por que o no estas en el read() cuando se produce o el read se bloque por otro motivo... como por ejemplo "fiandose" de un available() que no es.
En muchos casos, available devuelve 0 ya que es el numero de bytes que se pueden leer sin bloquearse, y si no hay nada que leer en ese momento, o lo que hay significa bloquearse, devuelve 0. Es un dato que parece que va a dar mas informacion de la que en realidad da.
S! |