From f657eef24e947bb2d581599ddaf016b51ac349ae Mon Sep 17 00:00:00 2001 From: compile_success <980965867@qq.com> Date: Sat, 22 Oct 2022 06:26:19 +0000 Subject: [PATCH 1/7] add writev and readv --- src/lstack/api/lstack_wrap.c | 44 ++++++++++++++++++++++++++++++++++++ 1 file changed, 44 insertions(+) diff --git a/src/lstack/api/lstack_wrap.c b/src/lstack/api/lstack_wrap.c index 1c1dcdd..9672d3d 100644 --- a/src/lstack/api/lstack_wrap.c +++ b/src/lstack/api/lstack_wrap.c @@ -333,6 +333,20 @@ static inline ssize_t do_read(int32_t s, void *mem, size_t len) return posix_api->read_fn(s, mem, len); } +static inline ssize_t do_readv(int32_t s, const struct iovec *iov, int iovcnt) +{ + struct msghdr msg; + + msg.msg_name = NULL; + msg.msg_namelen = 0; + msg.msg_iov = LWIP_CONST_CAST(struct iovec *, iov); + msg.msg_iovlen = iovcnt; + msg.msg_control = NULL; + msg.msg_controllen = 0; + msg.msg_flags = 0; + return recvmsg_from_stack(s, &msg, 0); +} + static inline ssize_t do_send(int32_t sockfd, const void *buf, size_t len, int32_t flags) { if (select_path(sockfd) != PATH_LWIP) { @@ -351,6 +365,20 @@ static inline ssize_t do_write(int32_t s, const void *mem, size_t size) return gazelle_send(s, mem, size, 0); } +static inline ssize_t do_writev(int32_t s, const struct iovec *iov, int iovcnt) +{ + struct msghdr msg; + + msg.msg_name = NULL; + msg.msg_namelen = 0; + msg.msg_iov = LWIP_CONST_CAST(struct iovec *, iov); + msg.msg_iovlen = iovcnt; + msg.msg_control = NULL; + msg.msg_controllen = 0; + msg.msg_flags = 0; + return sendmsg_to_stack(s, &msg, 0); +} + static inline ssize_t do_recvmsg(int32_t s, struct msghdr *message, int32_t flags) { if (message == NULL) { @@ -526,14 +554,26 @@ ssize_t read(int32_t s, void *mem, size_t len) { return do_read(s, mem, len); } +ssize_t readv(int32_t s, const struct iovec *iov, int iovcnt) +{ + return do_readv(s, iov, iovcnt); +} ssize_t write(int32_t s, const void *mem, size_t size) { return do_write(s, mem, size); } +ssize_t writev(int32_t s, const struct iovec *iov, int iovcnt) +{ + return do_writev(s, iov, iovcnt); +} ssize_t __wrap_write(int32_t s, const void *mem, size_t size) { return do_write(s, mem, size); } +ssize_t __wrap_writev(int32_t s, const struct iovec *iov, int iovcnt) +{ + return do_writev(s, iov, iovcnt); +} ssize_t recv(int32_t sockfd, void *buf, size_t len, int32_t flags) { return do_recv(sockfd, buf, len, flags); @@ -649,6 +689,10 @@ ssize_t __wrap_read(int32_t s, void *mem, size_t len) { return do_read(s, mem, len); } +ssize_t __wrap_readv(int32_t s, const struct iovec *iov, int iovcnt) +{ + return do_readv(s, iov, iovcnt); +} ssize_t __wrap_recv(int32_t sockfd, void *buf, size_t len, int32_t flags) { return do_recv(sockfd, buf, len, flags); -- 2.23.0