Sun, 22 Feb 2026 10:05:37 +0100
add raw mode for http streams
| src/server/util/io.c | file | annotate | diff | comparison | revisions | |
| src/server/util/io.h | file | annotate | diff | comparison | revisions |
--- a/src/server/util/io.c Sun Feb 22 09:33:48 2026 +0100 +++ b/src/server/util/io.c Sun Feb 22 10:05:37 2026 +0100 @@ -209,6 +209,9 @@ } void net_sys_setmode(Sysstream *st, int mode) { + if(mode > IO_MODE_NONBLOCKING) { + return; + } int flags; if (-1 == (flags = fcntl(st->fd, F_GETFL, 0))) { flags = 0; @@ -539,6 +542,14 @@ } } +ssize_t net_http_write_raw(HttpStream *st, const void *buf, size_t nbytes) { + return st->fd->write(st->fd, buf, nbytes); +} + +ssize_t net_http_writev_raw(HttpStream *st, struct iovec *iovec, int iovcnt) { + return st->fd->writev(st->fd, iovec, iovcnt); +} + ssize_t net_http_read(HttpStream *st, void *buf, size_t nbytes) { if(st->read >= st->max_read) { st->read_eof = WS_TRUE; @@ -797,6 +808,10 @@ return rd; } +ssize_t net_http_read_raw(HttpStream *st, void *buf, size_t nbytes) { + return st->fd->read(st->fd, buf, nbytes); +} + ssize_t net_http_sendfile(HttpStream *st, sendfiledata *sfd) { if(st->write_eof) return 0; ssize_t ret = 0; @@ -824,7 +839,11 @@ } void net_http_setmode(HttpStream *st, int mode) { - st->fd->setmode(st->fd, mode); + if(mode == IO_MODE_RAW) { + st->raw = TRUE; + } else { + st->fd->setmode(st->fd, mode); + } } int net_http_poll(HttpStream *st, EventHandler *ev, int events, Event *cb) {
--- a/src/server/util/io.h Sun Feb 22 09:33:48 2026 +0100 +++ b/src/server/util/io.h Sun Feb 22 10:05:37 2026 +0100 @@ -50,6 +50,7 @@ #define IO_MODE_BLOCKING 0 #define IO_MODE_NONBLOCKING 1 +#define IO_MODE_RAW 2 #define IO_POLL_NONE 0 #define IO_POLL_IN 1 @@ -180,6 +181,10 @@ * end of file indicator (write) */ WSBool write_eof; + /* + * raw socket IO + */ + WSBool raw; }; typedef struct SSLStream { @@ -216,9 +221,12 @@ ssize_t net_http_write(HttpStream *st, const void *buf, size_t nbytes); ssize_t net_http_writev(HttpStream *st, struct iovec *iovec, int iovcnt); +ssize_t net_http_write_raw(HttpStream *st, const void *buf, size_t nbytes); +ssize_t net_http_writev_raw(HttpStream *st, struct iovec *iovec, int iovcnt); ssize_t net_http_read(HttpStream *st, void *buf, size_t nbytes); ssize_t net_http_read_buffered(HttpStream *st, void *buf, size_t nbytes); ssize_t net_http_read_chunked(HttpStream *st, void *buf, size_t nbytes); +ssize_t net_http_read_raw(HttpStream *st, void *buf, size_t nbytes); ssize_t net_http_sendfile(HttpStream *st, sendfiledata *sfd); void net_http_close(HttpStream *st); void net_http_finish(HttpStream *st);