RECV

RECV

de Maria Jose Rabaza Chaves -
Número de respuestas: 4
Cuando hacemos recv(fd, buf, sizeof(buf), flags) en un loop
siempre se va a leer (mientras se pueda) como máximo sizeof(buf), o la cantidad de bytes leidos puede ir variando, y recibir a veces menos y luego recibir el maximo permitido....? 

No se si se entiende bien :P

A mi lo que me pasa es que cuando veo la cantidad de bytes leidos devueltos por el recv me aparecen:
4
4
4
..
3

y cuando vuelve a entra al loop queda como colgado en el recv, queda como esperando....

gracias
En respuesta a Maria Jose Rabaza Chaves

Re: RECV

de Maria Jose Rabaza Chaves -
ya vi que es variable la cantidad de bytes q recibis en cada recv... igualmente cuando lee el último "cacho" se queda colgado... alguna idea?
En respuesta a Maria Jose Rabaza Chaves

Re: RECV

de Diego Javier Bortot Valle -
A mi me paso lo mismo. El problema es que el recv, a menos que lo configures como no bloqueante, ES bloqueante. Y en cuanto al fin del mensaje, solo va a devolver 0 cuando el otro lado de la conexion la cerro "ordenadamente" ("The return value will be 0 when the peer has performed an orderly shutdown."). Como seguramente estas probando con paginas que mandan un keep-alive, el otro lado no cierra, por lo tanto tu recv se queda esperando mas datos.
La solucion que encontre fue poner el recv como no bloqueante (flag MSG_DONTWAIT) y agregar una variable de timeout para esperar un rato (en un bucle), y luego continuar con el codigo.
Mas info: http://www.linuxhowtos.org/manpages/2/recv.htm
Espero que sirva.
Sdos.