src/server/util/io.c

changeset 104
a8acbb12f27c
parent 82
740cfd9dd443
child 106
b122f34ddc80
equal deleted inserted replaced
103:d3b514e2ddbd 104:a8acbb12f27c
134 ssize_t r = read(st->fd, buf, nbytes); 134 ssize_t r = read(st->fd, buf, nbytes);
135 st->read += r; 135 st->read += r;
136 return r; 136 return r;
137 } 137 }
138 138
139 ssize_t net_stream_sendfile(NetIOStream *st, sendfiledata *sfd) { 139 ssize_t net_stream_sendfile(NetIOStream *st, sendfiledata *sfd) {
140 // TODO: header and trailer
141 ssize_t ret = 0; 140 ssize_t ret = 0;
142 off_t fileoffset = sfd->offset; 141 off_t fileoffset = sfd->offset;
143 if(sfd->fd->fd != -1) { 142 if(sfd->fd->fd != -1) {
144 #ifdef BSD 143 #ifdef BSD
145 struct iovec hdvec; 144 struct iovec hdvec;
166 &hdtr, 165 &hdtr,
167 NULL, 166 NULL,
168 0); 167 0);
169 #endif 168 #endif
170 #else // Solaris/Linux 169 #else // Solaris/Linux
171 ret = sendfile(st->fd, sfd->fd->fd, &fileoffset, sfd->len); 170 if(sfd->header) {
171 ret += write(st->fd, sfd->header, sfd->hlen);
172 }
173 ret += sendfile(st->fd, sfd->fd->fd, &fileoffset, sfd->len);
174 if(sfd->trailer) {
175 ret += write(st->fd, sfd->trailer, sfd->tlen);
176 }
172 #endif 177 #endif
173 } else { 178 } else {
174 // TODO: regular copy 179 // TODO: regular copy
175 fprintf(stderr, "sendfile not implemented for SYS_FILE\n"); 180 fprintf(stderr, "sendfile not implemented for SYS_FILE\n");
176 } 181 }

mercurial