Hola a todos.
Tengo un problema (que creo saber el que es, pero no encuentro en ningún sitio confirmación oficial, igual por lo obvio que es).
Tengo un ServidorTCP y un ClienteTCP.
El servidor TCP solo lee (read)
El clienteTCP solo escribe (write)
Es decir, el cliente manda un dato detrás de otro en a toda velocidad (no espera con un read confirmación de que fue leído)
write(socketfd, DATOS1, sizeof DATOS1);
.............................
.............................
.............................
write(socketfd, DATOSN, sizeof DATOSN); // Lo manda N veces
El servidor lo lee y lo escribe por pantalla
int n=read(s,buffer, len );
printf("Leido %s\n", buf);
fflush(stdout);
El código de arriba del servidor se ejecuta cada poco tiempo (tengo un select con un timeval a 0.3 segundos)
El problema es que no llegan todos los datos, dependiendo de la ejecución empieza a fallar en un sitio u otro.
Mi teoría es que el cliente manda demasiado rápido para el servidor, por lo que le sobreescibera el buffer del stream o algo similar (si por ejemplo, le pongo un sleep(1) entre dato y dato todo llega perfectamente.
El buffer del read es menor que SSIZE_MAX y he probado a redefinirla pero no cambia nada.
Mi pregunta es: ¿Se debe a lo que yo creo el fallo? ¿A otra cosa? ¿Hay alguna forma de asegurarme desde el servidor de todo lo que llega?
Supongo que algo tan básico le habrá ocurrido a más gente.