src/server/util/io.c

changeset 739
f5ccacc7bab8
parent 735
902b417ab6d2
equal deleted inserted replaced
738:677bff22d1b2 739:f5ccacc7bab8
135 pool_free(sys->pool, st); 135 pool_free(sys->pool, st);
136 } 136 }
137 137
138 #ifdef XP_UNIX 138 #ifdef XP_UNIX
139 ssize_t net_sys_write(Sysstream *st, const void *buf, size_t nbytes) { 139 ssize_t net_sys_write(Sysstream *st, const void *buf, size_t nbytes) {
140 st->st.io_errno = 0;
140 ssize_t r = write(st->fd, buf, nbytes); 141 ssize_t r = write(st->fd, buf, nbytes);
141 st->st.io_errno = errno; 142 if(r <= 0) {
143 st->st.io_errno = errno;
144 }
142 return r; 145 return r;
143 } 146 }
144 147
145 ssize_t net_sys_writev(Sysstream *st, struct iovec *iovec, int iovcnt) { 148 ssize_t net_sys_writev(Sysstream *st, struct iovec *iovec, int iovcnt) {
146 ssize_t r = writev(st->fd, iovec, iovcnt); 149 ssize_t r = writev(st->fd, iovec, iovcnt);
420 st->st.io_errno = 0; 423 st->st.io_errno = 0;
421 if(st->write_eof) return 0; 424 if(st->write_eof) return 0;
422 IOStream *fd = st->fd; 425 IOStream *fd = st->fd;
423 if(!st->chunked_enc) { 426 if(!st->chunked_enc) {
424 ssize_t w = fd->write(fd, buf, nbytes); 427 ssize_t w = fd->write(fd, buf, nbytes);
428 if(w <= 0) {
429 st->st.io_errno = fd->io_errno;
430 }
425 //st->written += w > 0 ? w : 0; 431 //st->written += w > 0 ? w : 0;
426 st->written += w; 432 st->written += w;
427 return w; 433 return w;
428 } else { 434 } else {
429 struct iovec io[8]; 435 struct iovec io[8];

mercurial