msrt-udp 0.1.0

Tokio UDP adapters for MSRT.
Documentation
  • Coverage
  • 91.67%
    22 out of 24 items documented0 out of 0 items with examples
  • Size
  • Source code size: 28.11 kB This is the summed size of all the files inside the crates.io package for this release.
  • Documentation size: 1.17 MB This is the summed size of all files generated by rustdoc for all configured targets
  • Ø build duration
  • this release: 11s Average build duration of successful builds.
  • all releases: 11s Average build duration of successful builds in releases after 2024-10-23.
  • Links
  • Homepage
  • atlas-orien/msrt-adapters
    0 0 0
  • crates.io
  • Dependencies
  • Versions
  • Owners
  • atlas-orien

msrt-udp

Tokio UDP adapters for MSRT.

This crate wraps MSRT endpoints around tokio::net::UdpSocket.

  • UdpClient: connected UDP client using ClientEndpoint
  • UdpServer<N>: fixed-capacity UDP server using ServerEndpoint<SocketAddr, N>

The server accepts unknown peers automatically until its fixed peer table is full.

Connected UDP sockets may surface recoverable transport feedback when a remote peer disappears or restarts. UdpClient::tick reports these conditions as UdpClientEvent::TransportUnavailable so clients can disconnect, back off, and start a fresh MSRT session instead of treating the condition as fatal.

Client

use msrt_udp::{UdpClient, UdpClientEvent};

# async fn run() -> msrt_udp::Result<()> {
let mut client = UdpClient::bind("127.0.0.1:0", "127.0.0.1:9000").await?;
client.connect()?;
client.send(b"hello")?;

loop {
    match client.tick().await? {
        UdpClientEvent::Message(message) => {
            println!("{:?}", message.as_bytes());
        }
        UdpClientEvent::SendFailed(_) => client.disconnect(),
        UdpClientEvent::TransportUnavailable { .. } => {
            client.disconnect();
            client.connect()?;
        }
        UdpClientEvent::Idle => {}
    }
}
# }

Server

use msrt_udp::{UdpServer, UdpServerEvent};

# async fn run() -> msrt_udp::Result<()> {
let mut server = UdpServer::<8>::bind("127.0.0.1:9000").await?;

loop {
    match server.tick().await? {
        UdpServerEvent::Message { peer, message } => {
            server.send_to(peer, message.as_bytes())?;
        }
        UdpServerEvent::SendFailed { peer, .. } => {
            server.disconnect(peer);
        }
        UdpServerEvent::Idle => {}
    }
}
# }

Examples

Run the server:

cargo run -p msrt-udp --example server -- 127.0.0.1:9000

Run the frontend in another terminal:

cargo run -p msrt-udp --example frontend -- 127.0.0.1:9000

To test reconnect behavior, stop the server while the frontend is running. The frontend will report either TransportUnavailable from UDP socket feedback or SendFailed from MSRT retry exhaustion. Start the server again and the frontend will create a fresh MSRT session and continue sending.