src/server/util/io.c

changeset 697
3ddfd45d4e47
parent 692
32faa1d6a744
equal deleted inserted replaced
696:27e42da5050f 697:3ddfd45d4e47
207 void net_sys_close(Sysstream *st) { 207 void net_sys_close(Sysstream *st) {
208 system_close(st->fd); 208 system_close(st->fd);
209 } 209 }
210 210
211 void net_sys_setmode(Sysstream *st, int mode) { 211 void net_sys_setmode(Sysstream *st, int mode) {
212 if(mode > IO_MODE_NONBLOCKING) {
213 return;
214 }
212 int flags; 215 int flags;
213 if (-1 == (flags = fcntl(st->fd, F_GETFL, 0))) { 216 if (-1 == (flags = fcntl(st->fd, F_GETFL, 0))) {
214 flags = 0; 217 flags = 0;
215 } 218 }
216 if(mode == IO_MODE_BLOCKING) { 219 if(mode == IO_MODE_BLOCKING) {
535 } else { 538 } else {
536 ssize_t w = fd->writev(fd, iovec, iovcnt); 539 ssize_t w = fd->writev(fd, iovec, iovcnt);
537 st->written += w; 540 st->written += w;
538 return w; 541 return w;
539 } 542 }
543 }
544
545 ssize_t net_http_write_raw(HttpStream *st, const void *buf, size_t nbytes) {
546 return st->fd->write(st->fd, buf, nbytes);
547 }
548
549 ssize_t net_http_writev_raw(HttpStream *st, struct iovec *iovec, int iovcnt) {
550 return st->fd->writev(st->fd, iovec, iovcnt);
540 } 551 }
541 552
542 ssize_t net_http_read(HttpStream *st, void *buf, size_t nbytes) { 553 ssize_t net_http_read(HttpStream *st, void *buf, size_t nbytes) {
543 if(st->read >= st->max_read) { 554 if(st->read >= st->max_read) {
544 st->read_eof = WS_TRUE; 555 st->read_eof = WS_TRUE;
795 } 806 }
796 807
797 return rd; 808 return rd;
798 } 809 }
799 810
811 ssize_t net_http_read_raw(HttpStream *st, void *buf, size_t nbytes) {
812 return st->fd->read(st->fd, buf, nbytes);
813 }
814
800 ssize_t net_http_sendfile(HttpStream *st, sendfiledata *sfd) { 815 ssize_t net_http_sendfile(HttpStream *st, sendfiledata *sfd) {
801 if(st->write_eof) return 0; 816 if(st->write_eof) return 0;
802 ssize_t ret = 0; 817 ssize_t ret = 0;
803 // TODO: support chunked transfer encoding 818 // TODO: support chunked transfer encoding
804 if(st->fd->sendfile) { 819 if(st->fd->sendfile) {
822 } 837 }
823 st->write_eof = WS_TRUE; 838 st->write_eof = WS_TRUE;
824 } 839 }
825 840
826 void net_http_setmode(HttpStream *st, int mode) { 841 void net_http_setmode(HttpStream *st, int mode) {
827 st->fd->setmode(st->fd, mode); 842 if(mode == IO_MODE_RAW) {
843 st->raw = TRUE;
844 } else {
845 st->fd->setmode(st->fd, mode);
846 }
828 } 847 }
829 848
830 int net_http_poll(HttpStream *st, EventHandler *ev, int events, Event *cb) { 849 int net_http_poll(HttpStream *st, EventHandler *ev, int events, Event *cb) {
831 return st->fd->poll(st->fd, ev, events, cb); 850 return st->fd->poll(st->fd, ev, events, cb);
832 } 851 }

mercurial