From 31bcec648aa57391115f877a2ca022d7ff6415aa Mon Sep 17 00:00:00 2001 From: Steven Fackler Date: Fri, 8 Feb 2019 20:42:34 +0100 Subject: Add vectored read and write support This functionality has lived for a while in the tokio ecosystem, where it can improve performance by minimizing copies. --- src/libstd/sys_common/net.rs | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) (limited to 'src/libstd/sys_common') diff --git a/src/libstd/sys_common/net.rs b/src/libstd/sys_common/net.rs index f75df3ea695..0d60593ce1f 100644 --- a/src/libstd/sys_common/net.rs +++ b/src/libstd/sys_common/net.rs @@ -1,7 +1,7 @@ use cmp; use ffi::CString; use fmt; -use io::{self, Error, ErrorKind}; +use io::{self, Error, ErrorKind, IoVec, IoVecMut}; use libc::{c_int, c_void}; use mem; use net::{SocketAddr, Shutdown, Ipv4Addr, Ipv6Addr}; @@ -255,6 +255,10 @@ impl TcpStream { self.inner.read(buf) } + pub fn read_vectored(&self, bufs: &mut [IoVecMut<'_>]) -> io::Result { + self.inner.read_vectored(bufs) + } + pub fn write(&self, buf: &[u8]) -> io::Result { let len = cmp::min(buf.len(), ::max_value() as usize) as wrlen_t; let ret = cvt(unsafe { @@ -266,6 +270,10 @@ impl TcpStream { Ok(ret as usize) } + pub fn write_vectored(&self, bufs: &[IoVec<'_>]) -> io::Result { + self.inner.write_vectored(bufs) + } + pub fn peer_addr(&self) -> io::Result { sockname(|buf, len| unsafe { c::getpeername(*self.inner.as_inner(), buf, len) -- cgit 1.4.1-3-g733a5