std: Add an experimental connect_timeout function
This adds a `TcpStream::connect_timeout` function in order to assist opening connections with a timeout (cc #13523). There isn't really much design space for this specific operation (unlike timing out normal blocking reads/writes), so I am fairly confident that this is the correct interface for this function. The function is marked #[experimental] because it takes a u64 timeout argument, and the u64 type is likely to change in the future.
This commit is contained in:
parent
9d5082e88a
commit
3915e17cd7
15 changed files with 490 additions and 145 deletions
|
|
@ -430,6 +430,8 @@ pub enum IoErrorKind {
|
|||
IoUnavailable,
|
||||
/// A parameter was incorrect in a way that caused an I/O error not part of this list.
|
||||
InvalidInput,
|
||||
/// The I/O operation's timeout expired, causing it to be canceled.
|
||||
TimedOut,
|
||||
}
|
||||
|
||||
/// A trait for objects which are byte-oriented streams. Readers are defined by
|
||||
|
|
|
|||
|
|
@ -22,6 +22,7 @@ use io::IoResult;
|
|||
use io::net::ip::SocketAddr;
|
||||
use io::{Reader, Writer, Listener, Acceptor};
|
||||
use kinds::Send;
|
||||
use option::{None, Some};
|
||||
use rt::rtio::{IoFactory, LocalIo, RtioSocket, RtioTcpListener};
|
||||
use rt::rtio::{RtioTcpAcceptor, RtioTcpStream};
|
||||
|
||||
|
|
@ -57,7 +58,21 @@ impl TcpStream {
|
|||
/// If no error is encountered, then `Ok(stream)` is returned.
|
||||
pub fn connect(addr: SocketAddr) -> IoResult<TcpStream> {
|
||||
LocalIo::maybe_raise(|io| {
|
||||
io.tcp_connect(addr).map(TcpStream::new)
|
||||
io.tcp_connect(addr, None).map(TcpStream::new)
|
||||
})
|
||||
}
|
||||
|
||||
/// Creates a TCP connection to a remote socket address, timing out after
|
||||
/// the specified number of milliseconds.
|
||||
///
|
||||
/// This is the same as the `connect` method, except that if the timeout
|
||||
/// specified (in milliseconds) elapses before a connection is made an error
|
||||
/// will be returned. The error's kind will be `TimedOut`.
|
||||
#[experimental = "the timeout argument may eventually change types"]
|
||||
pub fn connect_timeout(addr: SocketAddr,
|
||||
timeout_ms: u64) -> IoResult<TcpStream> {
|
||||
LocalIo::maybe_raise(|io| {
|
||||
io.tcp_connect(addr, Some(timeout_ms)).map(TcpStream::new)
|
||||
})
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -146,7 +146,8 @@ impl<'a> LocalIo<'a> {
|
|||
|
||||
pub trait IoFactory {
|
||||
// networking
|
||||
fn tcp_connect(&mut self, addr: SocketAddr) -> IoResult<~RtioTcpStream:Send>;
|
||||
fn tcp_connect(&mut self, addr: SocketAddr,
|
||||
timeout: Option<u64>) -> IoResult<~RtioTcpStream:Send>;
|
||||
fn tcp_bind(&mut self, addr: SocketAddr) -> IoResult<~RtioTcpListener:Send>;
|
||||
fn udp_bind(&mut self, addr: SocketAddr) -> IoResult<~RtioUdpSocket:Send>;
|
||||
fn unix_bind(&mut self, path: &CString)
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue