diff options
| author | Denys Zariaiev <denys.zariaiev@gmail.com> | 2019-03-13 21:00:45 +0100 |
|---|---|---|
| committer | Denys Zariaiev <denys.zariaiev@gmail.com> | 2019-03-13 21:00:45 +0100 |
| commit | eeb5f171da2486c34e4e473c97a1468279d05e7c (patch) | |
| tree | b452442f799d5d62141419e7091de13c212de9ff /src/libstd/net | |
| parent | 5c7ec6c421af26666d3ec1c5fe022d099133951c (diff) | |
| parent | 8bf1f1c8f4100247c1f9b3d9b7aecea5c970263e (diff) | |
| download | rust-eeb5f171da2486c34e4e473c97a1468279d05e7c.tar.gz rust-eeb5f171da2486c34e4e473c97a1468279d05e7c.zip | |
Merge remote-tracking branch 'upstream/master' into asm-compile-tests
Diffstat (limited to 'src/libstd/net')
| -rw-r--r-- | src/libstd/net/addr.rs | 30 | ||||
| -rw-r--r-- | src/libstd/net/ip.rs | 16 | ||||
| -rw-r--r-- | src/libstd/net/mod.rs | 2 | ||||
| -rw-r--r-- | src/libstd/net/parser.rs | 8 | ||||
| -rw-r--r-- | src/libstd/net/tcp.rs | 110 | ||||
| -rw-r--r-- | src/libstd/net/test.rs | 6 | ||||
| -rw-r--r-- | src/libstd/net/udp.rs | 26 |
7 files changed, 124 insertions, 74 deletions
diff --git a/src/libstd/net/addr.rs b/src/libstd/net/addr.rs index 4b60ee8e6da..f5a87cc3ea6 100644 --- a/src/libstd/net/addr.rs +++ b/src/libstd/net/addr.rs @@ -1,16 +1,16 @@ -use fmt; -use hash; -use io; -use mem; -use net::{ntoh, hton, IpAddr, Ipv4Addr, Ipv6Addr}; -use option; -use sys::net::netc as c; -use sys_common::{FromInner, AsInner, IntoInner}; -use sys_common::net::LookupHost; -use vec; -use iter; -use slice; -use convert::TryInto; +use crate::fmt; +use crate::hash; +use crate::io; +use crate::mem; +use crate::net::{ntoh, hton, IpAddr, Ipv4Addr, Ipv6Addr}; +use crate::option; +use crate::sys::net::netc as c; +use crate::sys_common::{FromInner, AsInner, IntoInner}; +use crate::sys_common::net::LookupHost; +use crate::vec; +use crate::iter; +use crate::slice; +use crate::convert::TryInto; /// An internet socket address, either IPv4 or IPv6. /// @@ -921,8 +921,8 @@ impl ToSocketAddrs for String { #[cfg(all(test, not(target_os = "emscripten")))] mod tests { - use net::*; - use net::test::{tsa, sa6, sa4}; + use crate::net::*; + use crate::net::test::{tsa, sa6, sa4}; #[test] fn to_socket_addr_ipaddr_u16() { diff --git a/src/libstd/net/ip.rs b/src/libstd/net/ip.rs index c8561290168..fa256ce5086 100644 --- a/src/libstd/net/ip.rs +++ b/src/libstd/net/ip.rs @@ -3,11 +3,11 @@ be to be stable", issue = "27709")] -use cmp::Ordering; -use fmt; -use hash; -use sys::net::netc as c; -use sys_common::{AsInner, FromInner}; +use crate::cmp::Ordering; +use crate::fmt; +use crate::hash; +use crate::sys::net::netc as c; +use crate::sys_common::{AsInner, FromInner}; /// An IP address, either IPv4 or IPv6. /// @@ -1509,9 +1509,9 @@ impl From<[u16; 8]> for IpAddr { // Tests for this module #[cfg(all(test, not(target_os = "emscripten")))] mod tests { - use net::*; - use net::Ipv6MulticastScope::*; - use net::test::{tsa, sa6, sa4}; + use crate::net::*; + use crate::net::Ipv6MulticastScope::*; + use crate::net::test::{tsa, sa6, sa4}; #[test] fn test_from_str_ipv4() { diff --git a/src/libstd/net/mod.rs b/src/libstd/net/mod.rs index 93e724db3d4..b68146939fd 100644 --- a/src/libstd/net/mod.rs +++ b/src/libstd/net/mod.rs @@ -28,7 +28,7 @@ #![stable(feature = "rust1", since = "1.0.0")] -use io::{self, Error, ErrorKind}; +use crate::io::{self, Error, ErrorKind}; #[stable(feature = "rust1", since = "1.0.0")] pub use self::ip::{IpAddr, Ipv4Addr, Ipv6Addr, Ipv6MulticastScope}; diff --git a/src/libstd/net/parser.rs b/src/libstd/net/parser.rs index 70e0c2ad4b4..7951cd6bcf2 100644 --- a/src/libstd/net/parser.rs +++ b/src/libstd/net/parser.rs @@ -3,10 +3,10 @@ //! This module is "publicly exported" through the `FromStr` implementations //! below. -use error::Error; -use fmt; -use net::{IpAddr, Ipv4Addr, Ipv6Addr, SocketAddr, SocketAddrV4, SocketAddrV6}; -use str::FromStr; +use crate::error::Error; +use crate::fmt; +use crate::net::{IpAddr, Ipv4Addr, Ipv6Addr, SocketAddr, SocketAddrV4, SocketAddrV6}; +use crate::str::FromStr; struct Parser<'a> { // parsing as ASCII, so can use byte array diff --git a/src/libstd/net/tcp.rs b/src/libstd/net/tcp.rs index 51bd76ae436..ce0c5c0bb0d 100644 --- a/src/libstd/net/tcp.rs +++ b/src/libstd/net/tcp.rs @@ -1,11 +1,11 @@ -use io::prelude::*; +use crate::io::prelude::*; -use fmt; -use io::{self, Initializer}; -use net::{ToSocketAddrs, SocketAddr, Shutdown}; -use sys_common::net as net_imp; -use sys_common::{AsInner, FromInner, IntoInner}; -use time::Duration; +use crate::fmt; +use crate::io::{self, Initializer, IoVec, IoVecMut}; +use crate::net::{ToSocketAddrs, SocketAddr, Shutdown}; +use crate::sys_common::net as net_imp; +use crate::sys_common::{AsInner, FromInner, IntoInner}; +use crate::time::Duration; /// A TCP stream between a local and a remote socket. /// @@ -569,6 +569,10 @@ impl TcpStream { impl Read for TcpStream { fn read(&mut self, buf: &mut [u8]) -> io::Result<usize> { self.0.read(buf) } + fn read_vectored(&mut self, bufs: &mut [IoVecMut<'_>]) -> io::Result<usize> { + self.0.read_vectored(bufs) + } + #[inline] unsafe fn initializer(&self) -> Initializer { Initializer::nop() @@ -577,12 +581,21 @@ impl Read for TcpStream { #[stable(feature = "rust1", since = "1.0.0")] impl Write for TcpStream { fn write(&mut self, buf: &[u8]) -> io::Result<usize> { self.0.write(buf) } + + fn write_vectored(&mut self, bufs: &[IoVec<'_>]) -> io::Result<usize> { + self.0.write_vectored(bufs) + } + fn flush(&mut self) -> io::Result<()> { Ok(()) } } #[stable(feature = "rust1", since = "1.0.0")] impl Read for &TcpStream { fn read(&mut self, buf: &mut [u8]) -> io::Result<usize> { self.0.read(buf) } + fn read_vectored(&mut self, bufs: &mut [IoVecMut<'_>]) -> io::Result<usize> { + self.0.read_vectored(bufs) + } + #[inline] unsafe fn initializer(&self) -> Initializer { Initializer::nop() @@ -591,6 +604,11 @@ impl Read for &TcpStream { #[stable(feature = "rust1", since = "1.0.0")] impl Write for &TcpStream { fn write(&mut self, buf: &[u8]) -> io::Result<usize> { self.0.write(buf) } + + fn write_vectored(&mut self, bufs: &[IoVec<'_>]) -> io::Result<usize> { + self.0.write_vectored(bufs) + } + fn flush(&mut self) -> io::Result<()> { Ok(()) } } @@ -911,14 +929,14 @@ impl fmt::Debug for TcpListener { #[cfg(all(test, not(any(target_os = "cloudabi", target_os = "emscripten"))))] mod tests { - use io::ErrorKind; - use io::prelude::*; - use net::*; - use net::test::{next_test_ip4, next_test_ip6}; - use sync::mpsc::channel; - use sys_common::AsInner; - use time::{Instant, Duration}; - use thread; + use crate::io::{ErrorKind, IoVec, IoVecMut}; + use crate::io::prelude::*; + use crate::net::*; + use crate::net::test::{next_test_ip4, next_test_ip6}; + use crate::sync::mpsc::channel; + use crate::sys_common::AsInner; + use crate::time::{Instant, Duration}; + use crate::thread; fn each_ip(f: &mut dyn FnMut(SocketAddr)) { f(next_test_ip4()); @@ -1185,6 +1203,53 @@ mod tests { } #[test] + fn read_vectored() { + each_ip(&mut |addr| { + let srv = t!(TcpListener::bind(&addr)); + let mut s1 = t!(TcpStream::connect(&addr)); + let mut s2 = t!(srv.accept()).0; + + let len = s1.write(&[10, 11, 12]).unwrap(); + assert_eq!(len, 3); + + let mut a = []; + let mut b = [0]; + let mut c = [0; 3]; + let len = t!(s2.read_vectored( + &mut [IoVecMut::new(&mut a), IoVecMut::new(&mut b), IoVecMut::new(&mut c)], + )); + assert!(len > 0); + assert_eq!(b, [10]); + // some implementations don't support readv, so we may only fill the first buffer + assert!(len == 1 || c == [11, 12, 0]); + }) + } + + #[test] + fn write_vectored() { + each_ip(&mut |addr| { + let srv = t!(TcpListener::bind(&addr)); + let mut s1 = t!(TcpStream::connect(&addr)); + let mut s2 = t!(srv.accept()).0; + + let a = []; + let b = [10]; + let c = [11, 12]; + t!(s1.write_vectored(&[IoVec::new(&a), IoVec::new(&b), IoVec::new(&c)])); + + let mut buf = [0; 4]; + let len = t!(s2.read(&mut buf)); + // some implementations don't support writev, so we may only write the first buffer + if len == 1 { + assert_eq!(buf, [10, 0, 0, 0]); + } else { + assert_eq!(len, 3); + assert_eq!(buf, [10, 11, 12, 0]); + } + }) + } + + #[test] fn double_bind() { each_ip(&mut |addr| { let listener1 = t!(TcpListener::bind(&addr)); @@ -1678,21 +1743,6 @@ mod tests { } #[test] - fn connect_timeout_unbound() { - // bind and drop a socket to track down a "probably unassigned" port - let socket = TcpListener::bind("127.0.0.1:0").unwrap(); - let addr = socket.local_addr().unwrap(); - drop(socket); - - let timeout = Duration::from_secs(1); - let e = TcpStream::connect_timeout(&addr, timeout).unwrap_err(); - assert!(e.kind() == io::ErrorKind::ConnectionRefused || - e.kind() == io::ErrorKind::TimedOut || - e.kind() == io::ErrorKind::Other, - "bad error: {} {:?}", e, e.kind()); - } - - #[test] fn connect_timeout_valid() { let listener = TcpListener::bind("127.0.0.1:0").unwrap(); let addr = listener.local_addr().unwrap(); diff --git a/src/libstd/net/test.rs b/src/libstd/net/test.rs index eb5862cbdd9..89fefd9d1d5 100644 --- a/src/libstd/net/test.rs +++ b/src/libstd/net/test.rs @@ -1,8 +1,8 @@ #![allow(warnings)] // not used on emscripten -use env; -use net::{SocketAddr, SocketAddrV4, SocketAddrV6, Ipv4Addr, Ipv6Addr, ToSocketAddrs}; -use sync::atomic::{AtomicUsize, Ordering}; +use crate::env; +use crate::net::{SocketAddr, SocketAddrV4, SocketAddrV6, Ipv4Addr, Ipv6Addr, ToSocketAddrs}; +use crate::sync::atomic::{AtomicUsize, Ordering}; static PORT: AtomicUsize = AtomicUsize::new(0); diff --git a/src/libstd/net/udp.rs b/src/libstd/net/udp.rs index d49871ce7bd..edc9d665444 100644 --- a/src/libstd/net/udp.rs +++ b/src/libstd/net/udp.rs @@ -1,9 +1,9 @@ -use fmt; -use io::{self, Error, ErrorKind}; -use net::{ToSocketAddrs, SocketAddr, Ipv4Addr, Ipv6Addr}; -use sys_common::net as net_imp; -use sys_common::{AsInner, FromInner, IntoInner}; -use time::Duration; +use crate::fmt; +use crate::io::{self, Error, ErrorKind}; +use crate::net::{ToSocketAddrs, SocketAddr, Ipv4Addr, Ipv6Addr}; +use crate::sys_common::net as net_imp; +use crate::sys_common::{AsInner, FromInner, IntoInner}; +use crate::time::Duration; /// A UDP socket. /// @@ -808,13 +808,13 @@ impl fmt::Debug for UdpSocket { #[cfg(all(test, not(any(target_os = "cloudabi", target_os = "emscripten"))))] mod tests { - use io::ErrorKind; - use net::*; - use net::test::{next_test_ip4, next_test_ip6}; - use sync::mpsc::channel; - use sys_common::AsInner; - use time::{Instant, Duration}; - use thread; + use crate::io::ErrorKind; + use crate::net::*; + use crate::net::test::{next_test_ip4, next_test_ip6}; + use crate::sync::mpsc::channel; + use crate::sys_common::AsInner; + use crate::time::{Instant, Duration}; + use crate::thread; fn each_ip(f: &mut dyn FnMut(SocketAddr, SocketAddr)) { f(next_test_ip4(), next_test_ip4()); |
