I was wondering whether gnulib has a function to safely read or recv
from a file desctiptor. I could not find one, and have had to hack
them up on numerous occasions. Here is one such version I wrote while
implementing a feature for GNU Inetutils:
size_t
recvbuf (int sockfd, void **buffer, size_t *size)
{
size_t count = 0;
size_t nread;
if (*buffer == NULL)
*size = BUFSIZ;
for (;;)
{
*buffer = realloc (*buffer, *size);
nread = recv (sockfd, *buffer + count, BUFSIZ, 0);
if (nread == -1)
error (EXIT_FAILURE, errno, "recv");
count += nread;
if (nread < BUFSIZ)
break;
else
*size += BUFSIZ;
}
return count;
}
Comments?
Happy hacking,
Debarshi