diff options
| author | bors <bors@rust-lang.org> | 2019-02-26 02:48:13 +0000 |
|---|---|---|
| committer | bors <bors@rust-lang.org> | 2019-02-26 02:48:13 +0000 |
| commit | fb162e69449b423c5aed0d9c39f6c046fa300c30 (patch) | |
| tree | 5d4292df6a7db1b62137c4472f1e65317d3919e1 /src/libstd/sys_common | |
| parent | 55c173c8ae8bda689fd609f391ee5e2e5b1b6d44 (diff) | |
| parent | 4785c748f2190440fb3f90b5319f121f2d31e0e4 (diff) | |
| download | rust-fb162e69449b423c5aed0d9c39f6c046fa300c30.tar.gz rust-fb162e69449b423c5aed0d9c39f6c046fa300c30.zip | |
Auto merge of #58357 - sfackler:vectored-io, r=alexcrichton
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. r? @alexcrichton
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) |
