diff -r 79ddd772e807 -r 570026d3a685 src/server/util/io.c --- a/src/server/util/io.c Sat May 14 15:22:37 2022 +0200 +++ b/src/server/util/io.c Sun May 15 08:56:00 2022 +0200 @@ -260,6 +260,7 @@ st->chunk_buf_pos = 0; st->chunked_enc = WS_FALSE; st->read_eof = WS_TRUE; + st->write_eof = WS_FALSE; return (IOStream*)st; } @@ -307,6 +308,7 @@ } ssize_t net_http_write(HttpStream *st, void *buf, size_t nbytes) { + if(st->write_eof) return 0; IOStream *fd = st->fd; if(st->chunked_enc) { // TODO: on some plattforms iov_len is smaller than size_t @@ -328,6 +330,7 @@ } ssize_t net_http_writev(HttpStream *st, struct iovec *iovec, int iovcnt) { + if(st->write_eof) return 0; IOStream *fd = st->fd; if(st->chunked_enc) { struct iovec *io = calloc(iovcnt + 1, sizeof(struct iovec)); @@ -582,7 +585,8 @@ return rd; } -ssize_t net_http_sendfile(HttpStream *st, sendfiledata *sfd) { +ssize_t net_http_sendfile(HttpStream *st, sendfiledata *sfd) { + if(st->write_eof) return 0; ssize_t ret = 0; // TODO: support chunked transfer encoding if(st->fd->sendfile) { @@ -599,9 +603,10 @@ } void net_http_finish(HttpStream *st) { - if(st->chunked_enc) { + if(st->chunked_enc && !st->write_eof) { st->fd->write(st->fd, "0\r\n\r\n", 5); } + st->write_eof = WS_TRUE; } void net_http_setmode(HttpStream *st, int mode) {