[][src]Struct fibers::net::TcpStream

pub struct TcpStream { /* fields omitted */ }

A structure which represents a TCP stream between a local socket and a remote socket.

The socket will be closed when the value is dropped.

Note

Non blocking mode is always enabled on this socket. Roughly speaking, if an operation (read or write) for a socket would block, it returns the std::io::ErrorKind::WouldBlock error and current fiber is suspended until the socket becomes available. If the fiber has multiple sockets (or other objects which may block), it will be suspended only the case that all of them are unavailable.

To handle read/write operations over TCP streams in futures style, it is preferred to use external crate like handy_async.

Examples

// See also: fibers/examples/tcp_example.rs
use fibers::{Executor, InPlaceExecutor, Spawn};
use fibers::net::{TcpListener, TcpStream};
use fibers::sync::oneshot;
use futures::{Future, Stream};

let mut executor = InPlaceExecutor::new().unwrap();
let (addr_tx, addr_rx) = oneshot::channel();

// Spawns TCP listener
executor.spawn(TcpListener::bind("127.0.0.1:0".parse().unwrap())
    .and_then(|listener| {
        let addr = listener.local_addr().unwrap();
        println!("# Start listening: {}", addr);
        addr_tx.send(addr).unwrap();
        listener.incoming()
            .for_each(move |(_client, addr)| {
                println!("# Accepted: {}", addr);
                Ok(())
            })
    })
    .map_err(|e| panic!("{:?}", e)));

// Spawns TCP client
let mut monitor = executor.spawn_monitor(addr_rx.map_err(|e| panic!("{:?}", e))
    .and_then(|server_addr| {
        TcpStream::connect(server_addr).and_then(move |mut stream| {
            use std::io::Write;
            println!("# Connected: {}", server_addr);
            stream.write(b"Hello World!"); // This may return `WouldBlock` error
            Ok(())
        })
    }));

// Runs until the TCP client exits
while monitor.poll().unwrap().is_not_ready() {
    executor.run_once().unwrap();
}
println!("# Succeeded");

Methods

impl TcpStream[src]

pub fn connect(addr: SocketAddr) -> Connect[src]

Makes a future to open a TCP connection to a remote host.

pub fn local_addr(&self) -> Result<SocketAddr>[src]

Returns the local socket address of this listener.

pub fn peer_addr(&self) -> Result<SocketAddr>[src]

Returns the socket address of the remote peer of this TCP connection.

pub fn take_error(&self) -> Result<Option<Error>>[src]

Get the value of the SO_ERROR option on this socket.

This will retrieve the stored error in the underlying socket, clearing the field in the process. This can be useful for checking errors between calls.

pub fn nodelay(&self) -> Result<bool>[src]

Gets the value of the TCP_NODELAY option on this socket.

pub fn set_nodelay(&self, nodelay: bool) -> Result<()>[src]

Sets the value of the TCP_NODELAY option on this socket.

pub fn with_inner<F, T>(&self, f: F) -> T where
    F: FnOnce(&MioTcpStream) -> T, 
[src]

Calls f with the reference to the inner socket.

Trait Implementations

impl Clone for TcpStream[src]

impl Debug for TcpStream[src]

impl Read for TcpStream[src]

impl Write for TcpStream[src]

Auto Trait Implementations

Blanket Implementations

impl<T, U> Into<U> for T where
    U: From<T>, 
[src]

impl<T> From<T> for T[src]

impl<T> ToOwned for T where
    T: Clone
[src]

type Owned = T

The resulting type after obtaining ownership.

impl<T, U> TryFrom<U> for T where
    U: Into<T>, 
[src]

type Error = Infallible

The type returned in the event of a conversion error.

impl<T, U> TryInto<U> for T where
    U: TryFrom<T>, 
[src]

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.

impl<T> Borrow<T> for T where
    T: ?Sized
[src]

impl<T> BorrowMut<T> for T where
    T: ?Sized
[src]

impl<T> Any for T where
    T: 'static + ?Sized
[src]