src/server/util/io.c

changeset 64
c7f5b062e622
parent 54
3a1d5a52adfc
child 65
14722c5f8856
--- a/src/server/util/io.c	Sat May 11 13:28:26 2013 +0200
+++ b/src/server/util/io.c	Wed May 22 13:27:31 2013 +0200
@@ -42,12 +42,14 @@
 
 IOStream native_io_funcs = {
     system_write,
+    system_writev,
     system_read,
     NULL
 };
 
 IOStream net_io_funcs = {
     net_stream_write,
+    net_stream_writev,
     net_stream_read,
     net_stream_sendfile
 };
@@ -64,6 +66,10 @@
     return write(((SystemIOStream*)st)->fd, buf, nbytes);
 }
 
+ssize_t system_writev(IOStream *st, struct iovec *iovec, int iovcnt) {
+    return writev(((SystemIOStream*)st)->fd, iovec, iovcnt);
+}
+
 ssize_t system_read(IOStream *st, void *buf, size_t nbytes) {
     return read(((SystemIOStream*)st)->fd, buf, nbytes);
 }
@@ -82,6 +88,10 @@
     return write(((NetIOStream*)st)->fd, buf, nbytes);
 }
 
+ssize_t net_stream_writev(IOStream *st, struct iovec *iovec, int iovcnt) {
+    return writev(((NetIOStream*)st)->fd, iovec, iovcnt);
+}
+
 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) {
@@ -124,14 +134,22 @@
     return r;
 }
 
+ssize_t net_writev(SYS_NETFD fd, struct iovec *iovec, int iovcnt) {
+    ssize_t r = ((IOStream*)fd)->writev(fd, iovec, iovcnt);
+    if(r < 0) {
+        return IO_ERROR;
+    }
+    return r;
+}
+
 ssize_t net_printf(SYS_NETFD fd, char *format, ...) {
     va_list arg;
     va_start(arg, format);
     char *buf;
     ssize_t len = vasprintf(&buf, format, arg);
-    net_write(fd, buf, len);
+    ssize_t r = net_write(fd, buf, len);
     free(buf);
-    return len;
+    return r;
 }
 
 ssize_t net_sendfile(SYS_NETFD fd, sendfiledata *sfd) {

mercurial