Tengo un problema al llamar a la llamada al sistema recv() no se bloquea. Tengo una configuración de estructura cliente-servidor en el momento, y el problema que estoy teniendo es que envío al servidor un mensaje, mientras que el servidor está configurado para que sea algo como:Sockets C/C++ y un recv no de bloqueo()
while (1) {
char buf[1024];
recv(fd, buf, sizeof(buf), flags);
processMsg(buf);
}
Se recibe el primer mensaje correctamente, pero el recv() no bloquea y "recibe" datos de basura que no son los deseados. Me gustaría reaccionar a los mensajes solo cuando se envían. ¿Alguien puede aconsejar?
Es mejor que compruebe el código de retorno de 'recv'. Puede gritar sobre un error mientras está mirando felizmente algo de basura en su búfer ... –
También debe pensar en la posibilidad de recibir parte de un mensaje o más bytes que el valor de un mensaje. Si el emisor transmite mensajes de 500 bytes, su llamada RECV solo podría recuperar 200 bytes o podría recuperar 700 bytes (si su remitente puede transmitir más de un mensaje sin esperar una respuesta). –
Debería haber incluido un enlace a [esta discusión sobre Fragmentación TCP] (http://stackoverflow.com/questions/4552855/tcp-fragmentation) en mi comentario anterior. –