--- a/src/server/util/io.c Thu Jun 20 14:07:46 2013 +0200 +++ b/src/server/util/io.c Fri Jun 21 12:10:44 2013 +0200 @@ -95,7 +95,7 @@ struct iovec io[2]; char chunk_len[16]; io[0].iov_base = chunk_len; - io[0].iov_len = snprintf(chunk_len, 16, "\n%zx\r\n", nbytes); + io[0].iov_len = snprintf(chunk_len, 16, "\r\n%zx\r\n", nbytes); io[1].iov_base = buf; io[1].iov_len = nbytes; ssize_t r = writev(st->fd, io, 2); @@ -114,7 +114,7 @@ for(int i=0;i<iovcnt;i++) { len += iovec[i].iov_len; } - io[0].iov_len = snprintf(chunk_len, 16, "\n%zx\r\n", len); + io[0].iov_len = snprintf(chunk_len, 16, "\r\n%zx\r\n", len); memcpy(io + 1, iovec, iovcnt * sizeof(struct iovec)); ssize_t r = writev(st->fd, io, iovcnt + 1); return r - io[0].iov_len; @@ -137,7 +137,7 @@ ssize_t ret = 0; off_t fileoffset = sfd->offset; if(sfd->fd->fd != -1) { -#ifdef OSX +#ifdef BSD struct iovec hdvec; hdvec.iov_base = (void*)sfd->header; hdvec.iov_len = sfd->hlen; @@ -151,8 +151,19 @@ hdtr.trl_cnt = 1; off_t len = sfd->len; - ret = sendfile(sfd->fd->fd, st->fd, sfd->offset, &len, &hdtr, 0); -#else +#ifdef OSX + ret = sendfile(sfd->fd->fd, st->fd, fileoffset, &len, &hdtr, 0); +#else // BSD + ret = sendfile( + sfd->fd->fd, + st->fd, + fileoffset, + sfd->len, + &hdtr, + NULL, + 0); +#endif +#else // Solaris/Linux ret = sendfile(st->fd, sfd->fd->fd, &fileoffset, sfd->len); #endif } else {