diff -r 3c2ed7a7a5fd -r f4d56bf9de40 src/server/io.c --- a/src/server/io.c Wed Dec 28 10:57:36 2011 +0100 +++ b/src/server/io.c Wed Dec 28 22:02:08 2011 +0100 @@ -38,6 +38,11 @@ system_read }; +IOStream net_io_funcs = { + net_stream_write, + net_stream_read +}; + IOStream* stream_new_from_fd(int fd) { SystemIOStream *st = malloc(sizeof(SystemIOStream)); @@ -55,6 +60,38 @@ } +IOStream* net_stream_from_fd(int fd) { + NetIOStream *st = malloc(sizeof(NetIOStream)); + st->st = net_io_funcs; + st->fd = fd; + st->max_read = 0; + st->rd = 0; +} + +ssize_t net_stream_write(IOStream *st, void *buf, size_t nbytes) { + // TODO: implement +} + +ssize_t net_stream_read(IOStream *st, void *buf, size_t nbytes) { + NetIOStream *n = (NetIOStream*)st; + if(n->max_read != 0 && n->rd >= n->max_read) { + return 0; + } + ssize_t r = read(n->fd, buf, nbytes); + n->rd += r; + return r; +} + + +ssize_t net_read(SYS_NETFD fd, void *buf, size_t nbytes) { + ssize_t r = ((IOStream*)fd)->read(fd, buf, nbytes); + if(r == 0) { + return IO_EOF; + } + return r; +} + + /* iovec buffer */ iovec_buf_t *iovec_buf_create(pool_handle_t *pool) { iovec_buf_t *buf = pool_malloc(pool, sizeof(iovec_buf_t));