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