From 52cc780c90d31cd41b89494ea2770c4f9ed47247 Mon Sep 17 00:00:00 2001 From: mekolat Date: Wed, 29 Jul 2015 11:41:36 -0400 Subject: replace socket write with send with MSG_NOSIGNAL --- src/io/fd.cpp | 4 ++++ src/io/fd.hpp | 1 + src/net/socket.cpp | 2 +- 3 files changed, 6 insertions(+), 1 deletion(-) diff --git a/src/io/fd.cpp b/src/io/fd.cpp index bb0bbd5..43bf7c4 100644 --- a/src/io/fd.cpp +++ b/src/io/fd.cpp @@ -75,6 +75,10 @@ namespace io { return ::write(fd, buf, count); } + ssize_t FD::send(const void *buf, size_t count, int flags) + { + return ::send(fd, buf, count, flags); + } ssize_t FD::pread(void *buf, size_t count, off_t offset) { return ::pread(fd, buf, count, offset); diff --git a/src/io/fd.hpp b/src/io/fd.hpp index 03a8b44..00aad8f 100644 --- a/src/io/fd.hpp +++ b/src/io/fd.hpp @@ -77,6 +77,7 @@ namespace io ssize_t read(void *buf, size_t count); ssize_t write(const void *buf, size_t count); + ssize_t send(const void *buf, size_t count, int flags); ssize_t pread(void *buf, size_t count, off_t offset); ssize_t pwrite(const void *buf, size_t count, off_t offset); ssize_t readv(const struct iovec *iov, int iovcnt); diff --git a/src/net/socket.cpp b/src/net/socket.cpp index fce45fb..7f71310 100644 --- a/src/net/socket.cpp +++ b/src/net/socket.cpp @@ -153,7 +153,7 @@ void recv_to_fifo(Session *s) static void send_from_fifo(Session *s) { - ssize_t len = s->fd.write(&s->wdata[0], s->wdata_size); + ssize_t len = s->fd.send(&s->wdata[0], s->wdata_size, MSG_NOSIGNAL); if (len > 0) { -- cgit v1.2.3-60-g2f50 From f5764cf03f7ba94249a0e517f12d7918bb1ecd42 Mon Sep 17 00:00:00 2001 From: mekolat Date: Wed, 29 Jul 2015 16:18:04 -0400 Subject: add more syscalls to io::FD --- src/io/fd.cpp | 26 ++++++++++++++++++++++++++ src/io/fd.hpp | 9 +++++++++ 2 files changed, 35 insertions(+) diff --git a/src/io/fd.cpp b/src/io/fd.cpp index 43bf7c4..918fd5e 100644 --- a/src/io/fd.cpp +++ b/src/io/fd.cpp @@ -79,6 +79,32 @@ namespace io { return ::send(fd, buf, count, flags); } + ssize_t FD::sendmsg(const struct msghdr *msg, int flags) + { + return ::sendmsg(fd, msg, flags); + } + int FD::sendmmsg(struct mmsghdr *msgvec, unsigned int vlen, unsigned int flags) + { + return ::sendmmsg(fd, msgvec, vlen, flags); + } + ssize_t FD::sendto(const void *buf, size_t count, int flags, + const struct sockaddr *dest_addr, socklen_t addrlen) + { + return ::sendto(fd, buf, count, flags, dest_addr, addrlen); + } + ssize_t FD::recv(void *buf, size_t count, int flags) + { + return ::recv(fd, buf, count, flags); + } + ssize_t FD::recvfrom(void *buf, size_t count, int flags, + struct sockaddr *src_addr, socklen_t *addrlen) + { + return ::recvfrom(fd, buf, count, flags, src_addr, addrlen); + } + ssize_t FD::recvmsg(struct msghdr *msg, int flags) + { + return ::recvmsg(fd, msg, flags); + } ssize_t FD::pread(void *buf, size_t count, off_t offset) { return ::pread(fd, buf, count, offset); diff --git a/src/io/fd.hpp b/src/io/fd.hpp index 00aad8f..517c7af 100644 --- a/src/io/fd.hpp +++ b/src/io/fd.hpp @@ -78,6 +78,15 @@ namespace io ssize_t read(void *buf, size_t count); ssize_t write(const void *buf, size_t count); ssize_t send(const void *buf, size_t count, int flags); + ssize_t sendto(const void *buf, size_t count, int flags, + const struct sockaddr *dest_addr, socklen_t addrlen); + ssize_t sendmsg(const struct msghdr *msg, int flags); + int sendmmsg(struct mmsghdr *msgvec, unsigned int vlen, + unsigned int flags); + ssize_t recv(void *buf, size_t len, int flags); + ssize_t recvfrom(void *buf, size_t len, int flags, + struct sockaddr *src_addr, socklen_t *addrlen); + ssize_t recvmsg(struct msghdr *msg, int flags); ssize_t pread(void *buf, size_t count, off_t offset); ssize_t pwrite(const void *buf, size_t count, off_t offset); ssize_t readv(const struct iovec *iov, int iovcnt); -- cgit v1.2.3-60-g2f50