diff options
| author | Brian Anderson <banderson@mozilla.com> | 2014-08-04 16:21:47 -0700 | 
|---|---|---|
| committer | Brian Anderson <banderson@mozilla.com> | 2014-08-13 11:31:48 -0700 | 
| commit | ee10f3501c1df04a015a5331c8343792e519c7a7 (patch) | |
| tree | 662384b040dcb8633d1a9157f7ff31ba1d2de452 | |
| parent | a391934ba8fb99b999f9956e855316692612f1ab (diff) | |
| download | rust-ee10f3501c1df04a015a5331c8343792e519c7a7.tar.gz rust-ee10f3501c1df04a015a5331c8343792e519c7a7.zip | |
std: Make connect_timeout return Err on zero duration
[breaking-change]
| -rw-r--r-- | src/libstd/io/net/tcp.rs | 10 | ||||
| -rw-r--r-- | src/libstd/io/net/unix.rs | 18 | ||||
| -rw-r--r-- | src/test/run-pass/tcp-connect-timeouts.rs | 11 | 
3 files changed, 27 insertions, 12 deletions
| diff --git a/src/libstd/io/net/tcp.rs b/src/libstd/io/net/tcp.rs index 34ccf9e617a..6d03d4a8eed 100644 --- a/src/libstd/io/net/tcp.rs +++ b/src/libstd/io/net/tcp.rs @@ -27,6 +27,7 @@ use io::net::addrinfo::get_host_addresses; use io::net::ip::SocketAddr; use io::{IoError, ConnectionFailed, InvalidInput}; use io::{Reader, Writer, Listener, Acceptor}; +use io::{standard_error, TimedOut}; use from_str::FromStr; use kinds::Send; use option::{None, Some, Option}; @@ -102,13 +103,14 @@ impl TcpStream { /// Note that the `addr` argument may one day be split into a separate host /// and port, similar to the API seen in `connect`. /// - /// # Failure - /// - /// Fails on a `timeout` of zero or negative duration. + /// If a `timeout` with zero or negative duration is specified then + /// the function returns `Err`, with the error kind set to `TimedOut`. #[experimental = "the timeout argument may eventually change types"] pub fn connect_timeout(addr: SocketAddr, timeout: Duration) -> IoResult<TcpStream> { - assert!(timeout > Duration::milliseconds(0)); + if timeout <= Duration::milliseconds(0) { + return standard_error(TimedOut); + } let SocketAddr { ip, port } = addr; let addr = rtio::SocketAddr { ip: super::to_rtio(ip), port: port }; diff --git a/src/libstd/io/net/unix.rs b/src/libstd/io/net/unix.rs index 0b647e67a2d..99e4822afeb 100644 --- a/src/libstd/io/net/unix.rs +++ b/src/libstd/io/net/unix.rs @@ -29,6 +29,7 @@ use prelude::*; use c_str::ToCStr; use clone::Clone; use io::{Listener, Acceptor, Reader, Writer, IoResult, IoError}; +use io::{standard_error, TimedOut}; use kinds::Send; use boxed::Box; use rt::rtio::{IoFactory, LocalIo, RtioUnixListener}; @@ -68,13 +69,14 @@ impl UnixStream { /// This function is similar to `connect`, except that if `timeout_ms` /// elapses the function will return an error of kind `TimedOut`. /// - /// # Failure - /// - /// Fails on a `timeout` of zero or negative duration. + /// If a `timeout` with zero or negative duration is specified then + /// the function returns `Err`, with the error kind set to `TimedOut`. #[experimental = "the timeout argument is likely to change types"] pub fn connect_timeout<P: ToCStr>(path: &P, timeout: Duration) -> IoResult<UnixStream> { - assert!(timeout > Duration::milliseconds(0)); + if timeout <= Duration::milliseconds(0) { + return standard_error(TimedOut); + } LocalIo::maybe_raise(|io| { let s = io.unix_connect(&path.to_c_str(), Some(timeout.num_milliseconds() as u64)); @@ -518,14 +520,14 @@ mod tests { iotest!(fn connect_timeout_zero() { let addr = next_test_unix(); let _a = UnixListener::bind(&addr).unwrap().listen().unwrap(); - assert!(UnixStream::connect_timeout(&addr, Duration::milliseconds(0)).is_ok()); - } #[should_fail]) + assert!(UnixStream::connect_timeout(&addr, Duration::milliseconds(0)).is_err()); + }) iotest!(fn connect_timeout_negative() { let addr = next_test_unix(); let _a = UnixListener::bind(&addr).unwrap().listen().unwrap(); - assert!(UnixStream::connect_timeout(&addr, Duration::milliseconds(-1)).is_ok()); - } #[should_fail]) + assert!(UnixStream::connect_timeout(&addr, Duration::milliseconds(-1)).is_err()); + }) iotest!(fn close_readwrite_smoke() { let addr = next_test_unix(); diff --git a/src/test/run-pass/tcp-connect-timeouts.rs b/src/test/run-pass/tcp-connect-timeouts.rs index 1bdd06ca0e9..5519963693d 100644 --- a/src/test/run-pass/tcp-connect-timeouts.rs +++ b/src/test/run-pass/tcp-connect-timeouts.rs @@ -96,3 +96,14 @@ iotest!(fn timeout_error() { assert!(TcpStream::connect_timeout(addr, Duration::milliseconds(1000)).is_err()); }) + + iotest!(fn connect_timeout_zero() { + let addr = next_test_ip4(); + assert!(TcpStream::connect_timeout(&addr, Duration::milliseconds(0)).is_err()); + }) + + iotest!(fn connect_timeout_negative() { + let addr = next_test_ip4(); + assert!(TcpStream::connect_timeout(&addr, Duration::milliseconds(-1)).is_err()); + }) + | 
