[sheepdog] [PATCH v10 4/7] lib: add wrappers do_writev2() and writev2() for typical usage of writev()
Hitoshi Mitake
mitake.hitoshi at lab.ntt.co.jp
Mon Apr 8 03:47:04 CEST 2013
This patch adds 2 new wrappers: do_write2v() and writev2() for
enshorting typical usage of writev().
Typical usage of writev() is sending an array of struct iovec with 2
elements, one for a header and another for a message body.
With do_writev2(), declaring the array in caller side can be removed.
writev2() is a wrapper for do_writev2(). Typical headers have fixed
length, so writev2() obtains their length with sizeof() (so writev2()
is defined as a macro function).
Signed-off-by: Hitoshi Mitake <mitake.hitoshi at lab.ntt.co.jp>
---
include/net.h | 5 +++++
lib/net.c | 15 +++++++++++++++
2 files changed, 20 insertions(+), 0 deletions(-)
diff --git a/include/net.h b/include/net.h
index 90ea536..75e6a76 100644
--- a/include/net.h
+++ b/include/net.h
@@ -72,6 +72,11 @@ int set_snd_timeout(int fd);
int set_rcv_timeout(int fd);
int get_local_addr(uint8_t *bytes);
bool inetaddr_is_valid(char *addr);
+int do_writev2(int fd, void *hdr, size_t hdr_len, void *body, size_t body_len);
+
+/* for typical usage of do_writev2() */
+#define writev2(fd, hdr, body, body_len) \
+ do_writev2(fd, hdr, sizeof(*hdr), body, body_len)
static inline int connect_to_addr(const uint8_t *addr, int port)
{
diff --git a/lib/net.c b/lib/net.c
index 116e55a..f25e733 100644
--- a/lib/net.c
+++ b/lib/net.c
@@ -25,6 +25,8 @@
#include <sys/un.h>
#include <sys/stat.h>
#include <sys/types.h>
+#include <sys/uio.h>
+
#include "sheepdog_proto.h"
#include "sheep.h"
#include "util.h"
@@ -648,3 +650,16 @@ bool inetaddr_is_valid(char *addr)
}
return true;
}
+
+int do_writev2(int fd, void *hdr, size_t hdr_len, void *body, size_t body_len)
+{
+ struct iovec iov[2];
+
+ iov[0].iov_base = hdr;
+ iov[0].iov_len = hdr_len;
+
+ iov[1].iov_base = body;
+ iov[1].iov_len = body_len;
+
+ return writev(fd, iov, 2);
+}
--
1.7.2.5
More information about the sheepdog
mailing list