Oops sorry! This one is hopefully better.
size_t
recvbuf (int sockfd, void **buffer, size_t *size)
{
size_t block = BUFSIZ;
size_t count = 0;
ssize_t nread;
if (*buffer == NULL)
*size = block;
for (;;)
{
*buffer = xrealloc (*buffer, *size);
nread = recv (sockfd, *buffer + count, block, 0);
if (nread == -1)
error (EXIT_FAILURE, errno, "recv");
count += nread;
if (nread < block)
break;
else
{
block = (*size / 2 > BUFSIZ) ? *size / 2 : BUFSIZ;
*size += block;
}
}
return count;
}
Comments?
Happy hacking,
Debarshi