Foros del Web » Programación para mayores de 30 ;) » C/C++ »

SocketTCP en C, ¿sobrecarga del buffer?

Estas en el tema de SocketTCP en C, ¿sobrecarga del buffer? en el foro de C/C++ en Foros del Web. 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 ...
  #1 (permalink)  
Antiguo 05/09/2012, 11:28
 
Fecha de Ingreso: septiembre-2012
Mensajes: 1
Antigüedad: 12 años, 2 meses
Puntos: 0
SocketTCP en C, ¿sobrecarga del buffer?

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.

Etiquetas: int, sobrecarga
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 15:40.