1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76
//! Implementation of the [Micro Transport Protocol][spec]. //! //! This library provides both a socket interface (`UtpSocket`) and a stream interface //! (`UtpStream`). //! I recommend that you use `UtpStream`, as it implements the `Read` and `Write` //! traits we all know (and love) from `std::io`, which makes it generally easier to work with than //! `UtpSocket`. //! //! [spec]: http://www.bittorrent.org/beps/bep_0029.html //! //! # Installation //! //! Ensure your `Cargo.toml` contains: //! //! ```toml //! [dependencies] //! utp = "*" //! ``` //! //! # Examples //! //! ```no_run //! //! use async_std_utp::UtpStream; //! use async_std::prelude::*; //! //! # fn main() { async_std::task::block_on(async { //! // Connect to an hypothetical local server running on port 8080 //! let addr = "127.0.0.1:8080"; //! let mut stream = UtpStream::connect(addr).await.expect("Error connecting to remote peer"); //! //! // Send a string //! stream.write("Hi there!".as_bytes()).await.expect("Write failed"); //! //! // Close the stream //! stream.close().await.expect("Error closing connection"); //! # }); } //! ``` //! //! Note that you can easily convert a socket to a stream using the `Into` trait, like so: //! //! ```no_run //! # fn main() { async_std::task::block_on(async { //! use async_std_utp::{UtpStream, UtpSocket}; //! let socket = UtpSocket::bind("0.0.0.0:0").await.expect("Error binding socket"); //! let stream: UtpStream = socket.into(); //! # }); } //! ``` #![deny(missing_docs)] // Optional features #![cfg_attr(feature = "clippy", feature(plugin))] #![cfg_attr(feature = "clippy", plugin(clippy))] #![cfg_attr( feature = "clippy", allow( len_without_is_empty, doc_markdown, needless_return, transmute_ptr_to_ref ) )] #![cfg_attr(feature = "unstable", feature(test))] // Public API pub use crate::socket::UtpListener; pub use crate::socket::UtpSocket; pub use crate::stream::UtpStream; mod bit_iterator; mod error; mod packet; mod socket; mod stream; mod time; mod util;