src/server/io.c

changeset 8
f4d56bf9de40
parent 4
998844b5ed25
child 9
30e51941a673
--- 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));

mercurial