about summary refs log tree commit diff
path: root/src/libstd/sys_common
diff options
context:
space:
mode:
authorSteven Fackler <sfackler@gmail.com>2017-07-04 23:46:24 -0700
committerSteven Fackler <sfackler@gmail.com>2017-07-06 19:35:49 -0700
commit8c92da3c518111b28f0b5fb297ab719bf353cdc6 (patch)
treee68b05e25cf9a0a16bd9d6e72d161f92b843beac /src/libstd/sys_common
parentccf401f8f7847413ac43f38e3c86016becf67b07 (diff)
downloadrust-8c92da3c518111b28f0b5fb297ab719bf353cdc6.tar.gz
rust-8c92da3c518111b28f0b5fb297ab719bf353cdc6.zip
Implement TcpStream::connect_timeout
This breaks the "single syscall rule", but it's really annoying to hand
write and is pretty foundational.
Diffstat (limited to 'src/libstd/sys_common')
-rw-r--r--src/libstd/sys_common/net.rs8
1 files changed, 8 insertions, 0 deletions
diff --git a/src/libstd/sys_common/net.rs b/src/libstd/sys_common/net.rs
index 809b728379d..5775dd4f1fc 100644
--- a/src/libstd/sys_common/net.rs
+++ b/src/libstd/sys_common/net.rs
@@ -215,6 +215,14 @@ impl TcpStream {
         Ok(TcpStream { inner: sock })
     }
 
+    pub fn connect_timeout(addr: &SocketAddr, timeout: Duration) -> io::Result<TcpStream> {
+        init();
+
+        let sock = Socket::new(addr, c::SOCK_STREAM)?;
+        sock.connect_timeout(addr, timeout)?;
+        Ok(TcpStream { inner: sock })
+    }
+
     pub fn socket(&self) -> &Socket { &self.inner }
 
     pub fn into_socket(self) -> Socket { self.inner }