Expand description
An implementation of UDP-based Data Transfer Protocol (UDT) based on Tokio primitives.
UDT is a high performance data transport protocol. It was designed for data intensive applications over high speed wide area networks, to overcome the efficiency and fairness problems of TCP. As its names indicates, UDT is built on top of UDP and it provides both reliable data streaming and messaging services.
§Usage
§UDT server example
Bind a port with UdtListener
:
use std::net::Ipv4Addr;
use tokio::io::{AsyncReadExt, Result};
use tokio_udt::UdtListener;
#[tokio::main]
async fn main() -> Result<()> {
let port = 9000;
let listener = UdtListener::bind((Ipv4Addr::UNSPECIFIED, port).into(), None).await?;
println!("Waiting for connections...");
loop {
let (addr, mut connection) = listener.accept().await?;
println!("Accepted connection from {}", addr);
let mut buffer = Vec::with_capacity(1_000_000);
tokio::task::spawn({
async move {
loop {
match connection.read_buf(&mut buffer).await {
Ok(_size) => {}
Err(e) => {
eprintln!("Connnection with {} failed: {}", addr, e);
break;
}
}
}
}
});
}
}
§UDT client example
Open a connection with UdtConnection
use std::net::Ipv4Addr;
use tokio::io::{AsyncWriteExt, Result};
use tokio_udt::UdtConnection;
#[tokio::main]
async fn main() -> Result<()> {
let port = 9000;
let mut connection = UdtConnection::connect((Ipv4Addr::LOCALHOST, port), None).await?;
loop {
connection.write_all(b"Hello World!").await?;
}
}
Structs§
- Rate
Control - UdtConfiguration
- Options for UDT protocol
- UdtConnection
- UdtListener
- An object representing a UDT socket listening for incoming connections
Type Aliases§
- SeqNumber
- Packet Sequence Number (on 31 bits)