diff options
| author | Steven Fackler <sfackler@gmail.com> | 2019-02-08 20:42:34 +0100 |
|---|---|---|
| committer | Steven Fackler <sfackler@gmail.com> | 2019-02-13 19:40:17 -0800 |
| commit | 31bcec648aa57391115f877a2ca022d7ff6415aa (patch) | |
| tree | 2e9ba98a3146cb8eebf72d469a81615389edd4fd /src/libstd/sys_common | |
| parent | 4772dc8087b1d0f2bab6d064fd930e596c82d439 (diff) | |
| download | rust-31bcec648aa57391115f877a2ca022d7ff6415aa.tar.gz rust-31bcec648aa57391115f877a2ca022d7ff6415aa.zip | |
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.
Diffstat (limited to 'src/libstd/sys_common')
| -rw-r--r-- | src/libstd/sys_common/net.rs | 10 |
1 files changed, 9 insertions, 1 deletions
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<usize> { + self.inner.read_vectored(bufs) + } + pub fn write(&self, buf: &[u8]) -> io::Result<usize> { let len = cmp::min(buf.len(), <wrlen_t>::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<usize> { + self.inner.write_vectored(bufs) + } + pub fn peer_addr(&self) -> io::Result<SocketAddr> { sockname(|buf, len| unsafe { c::getpeername(*self.inner.as_inner(), buf, len) |
