You could just directly recv into your big buffer and add an offset every time:
iRes = recv(ClientSocket, (buff+offset), 4096-offset, 0);
Etc. Just watch out not to overflow the buffer. If you need to receive the data separately and add them to the buffer depending on content, just memcpy the recvbuf into buffer (with offset). The offset just keeps track up until which point the buffer is already filled. Again, keep an eye out for buffer overflows.