//! Hello world server. //! //! A simple client that opens a TCP stream, writes "hello world\n", and closes //! the connection. //! //! You can test this out by running: //! //! ncat -l 6142 //! //! And then in another terminal run: //! //! cargo run --example hello_world #![deny(warnings)] extern crate tokio; use tokio::io; use tokio::net::TcpStream; use tokio::prelude::*; pub fn main() -> Result<(), Box> { let addr = "127.0.0.1:6142".parse()?; // Open a TCP stream to the socket address. // // Note that this is the Tokio TcpStream, which is fully async. let client = TcpStream::connect(&addr).and_then(|stream| { println!("created stream"); io::write_all(stream, "hello world\n").then(|result| { println!("wrote to stream; success={:?}", result.is_ok()); Ok(()) }) }) .map_err(|err| { // All tasks must have an `Error` type of `()`. This forces error // handling and helps avoid silencing failures. // // In our example, we are only going to log the error to STDOUT. println!("connection error = {:?}", err); }); // Start the Tokio runtime. // // The Tokio is a pre-configured "out of the box" runtime for building // asynchronous applications. It includes both a reactor and a task // scheduler. This means applications are multithreaded by default. // // This function blocks until the runtime reaches an idle state. Idle is // defined as all spawned tasks have completed and all I/O resources (TCP // sockets in our case) have been dropped. println!("About to create the stream and write to it..."); tokio::run(client); println!("Stream has been created and written to."); Ok(()) }