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

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]

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

Returns the local socket address of this listener.

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

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.

Calls f with the reference to the inner socket.

Trait Implementations

impl Debug for TcpStream
[src]

Formats the value using the given formatter.

impl Clone for TcpStream
[src]

Returns a copy of the value. Read more

Performs copy-assignment from source. Read more

impl Read for TcpStream
[src]

Pull some bytes from this source into the specified buffer, returning how many bytes were read. Read more

Read all bytes until EOF in this source, placing them into buf. Read more

Read all bytes until EOF in this source, placing them into buf. Read more

Read the exact number of bytes required to fill buf. Read more

Creates a "by reference" adaptor for this instance of Read. Read more

Transforms this Read instance to an Iterator over its bytes. Read more

🔬 This is a nightly-only experimental API. (io)

the semantics of a partial read/write of where errors happen is currently unclear and may change

Transforms this Read instance to an Iterator over chars. Read more

Creates an adaptor which will chain this stream with another. Read more

Creates an adaptor which will read at most limit bytes from it. Read more

impl Write for TcpStream
[src]

Write a buffer into this object, returning how many bytes were written. Read more

Flush this output stream, ensuring that all intermediately buffered contents reach their destination. Read more

Attempts to write an entire buffer into this write. Read more

Writes a formatted string into this writer, returning any error encountered. Read more

Creates a "by reference" adaptor for this instance of Write. Read more