rust-utp

Crate Version Build Status Windows Build Status Coverage Status

A Micro Transport Protocol library implemented in Rust.

API documentation

Overview

The Micro Transport Protocol is a reliable protocol with ordered delivery built over UDP. Its congestion control algorithm is LEDBAT, which tries to use as much unused bandwidth as it can but readily yields to competing flows, making it useful for bulk transfers without introducing congestion in the network.

The current implementation is somewhat incomplete, lacking a complete implementation of congestion control. However, it does support packet loss detection (except by timeout) the Selective Acknowledgment extension, handles unordered and duplicate packets and presents a stream interface (UtpStream).

Usage

To use utp, add this to your Cargo.toml:

toml [dependencies] utp = "*"

Then, import it in your crate root or wherever you need it:

rust extern crate utp;

Examples

Check the examples directory. The simplest example would be:

```rust extern crate utp;

use utp::UtpStream; use std::io::{Read, Write};

fn main() { // Connect to an hypothetical local server running on port 8080 let addr = "127.0.0.1:8080"; let mut stream = match UtpStream::connect(addr) { Ok(stream) => stream, Err(e) => panic!("{}", e), };

// Send a string
match stream.write("Hi there!".as_bytes()) {
    Ok(_) => (),
    Err(e) => println!("Write failed with {}", e)
}

// Close the stream
match stream.close() {
    Ok(()) => println!("Connection closed"),
    Err(e) => println!("{}", e)
}

} ```

To implement

License

This library is distributed under similar terms to Rust: dual licensed under the MIT license and the Apache license (version 2.0).

See LICENSE-APACHE, LICENSE-MIT, and COPYRIGHT for details.