En C Tenía código de trabajo, pero no tenía idea de por qué funcionaba, así que comencé a reescribirlo para poder entender lo que estaba pasando.Cómo almacenar la salida de recv()?
Hasta ahora todo bien! Reescribí y estoy 90% seguro de entender todo lo que está sucediendo ahora; Sin embargo, el problema es que no tengo idea de cómo almacenar el fragmento de datos recibido por recv
(databff
) en mi memoria intermedia previamente asignada (htmlbff
).
considere el siguiente código (nótese que me desnudé esto abajo un poco, por lo que sólo incluye los conceptos básicos, por ejemplo, sin reasignación de memoria o escape, protección, etc ...):
#define BUFFERSIZE 4096
#define MAXDATASIZE 256
char *htmlbff, databff[MAXDATASIZE];
int c, i = BUFFERSIZE, q = 0;
if(!(htmlbff = malloc(i)))
{
printf("\nError! Memory allocation failed!");
return 0x00;
}
while((c = recv(sock, databff, MAXDATASIZE, 0)) > 0)
{
/*memory checks stripped out since they are irrelevent for this post*/
/*store data to the appropriate area in htmlbff*/
q += c;
}
Así que (si Estoy haciendo esto bien, y las cosas van como creo) c
es el tamaño del fragmento de datos actual, y q
es la cantidad total de datos recibidos hasta ahora (q
se incrementa en c
cada vez que se repite el ciclo). Por el momento estoy usando q
para el manejo de la memoria (en caso de que alguien se esté preguntando) pero creo que también tendrá un propósito en la solución a este problema.
En cualquier caso, la pregunta que hago es en relación con el segundo comentario. ¿Cómo guardo los datos de recv en htmlbff
correctamente?
Me gusta mucho esta respuesta, gracias. Encontré este más útil porque ahora puedo omitir el uso del búfer y escribir directamente en htmlbff. –