src/server/util/io.c

changeset 104
a8acbb12f27c
parent 82
740cfd9dd443
child 106
b122f34ddc80
--- a/src/server/util/io.c	Sat Oct 17 23:05:23 2015 +0200
+++ b/src/server/util/io.c	Fri Oct 23 17:28:09 2015 +0200
@@ -136,8 +136,7 @@
     return r;
 }
 
-ssize_t net_stream_sendfile(NetIOStream *st, sendfiledata *sfd) {
-    // TODO: header and trailer
+ssize_t net_stream_sendfile(NetIOStream *st, sendfiledata *sfd) {  
     ssize_t ret = 0;
     off_t fileoffset = sfd->offset;
     if(sfd->fd->fd != -1) {
@@ -168,7 +167,13 @@
                 0);
 #endif
 #else // Solaris/Linux
-        ret = sendfile(st->fd, sfd->fd->fd, &fileoffset, sfd->len);
+        if(sfd->header) {
+            ret += write(st->fd, sfd->header, sfd->hlen);
+        }
+        ret += sendfile(st->fd, sfd->fd->fd, &fileoffset, sfd->len);
+        if(sfd->trailer) {
+            ret += write(st->fd, sfd->trailer, sfd->tlen);
+        }
 #endif
     } else {
         // TODO: regular copy

mercurial