How to store output of recv()?
c, dynamic, recv, sockets
Solution
Use `memcpy`, and offset `htmlbff` by `q`:
memcpy(htmlbff + q, databff, c);
You can similarly `recv` directly into `htmlbff`:
c = recv(sock, htmlbff + q, MAXDATASIZE, 0));
But it's fine to keep a separate buffer, and depending upon your full code, it may make things clearer.
Be sure that you add checks against `BUFFERSIZE` so that you don't copy past the bounds of `htmlbff`. You mentioned that you've stripped out `realloc` handling, so maybe you're already handling this.
Your constant names are a bit confusing, when buffering data I would use `BUFFERSIZE` to indicate the size of each chunk, i.e. the size of `databff`.
Problem
In C I had working code but have no idea why it worked, so I started rewriting it so I could actually understand what is going on. So far so good! I rewrote and am 90% sure I understand everything that is going on now; the issue however, is that I have no idea how to store the data chunk received by `recv` (`databff`) into my pre-allocated buffer (`htmlbff`). Consider the following code (note that I stripped this down quite a bit, so it only includes the basics, e.g. no memory reallocation or leak protection, 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; } ``` So (if I am doing this right, and things are going as I think they are) `c` is the size of the current data chunk, and `q` is the total amount of data received so far (`q` is incremented by `c` each time the loop repeats). At the moment I am using `q` for memory handling (in case anybody was wondering) but I believe that it will also have purpose in the solution to this problem. At any rate the question I am asking is in regards to the second comment. How do I store the data from recv into `htmlbff` correctly?