Expand description

Asynchronous network endpoint and a controlled network simulator.

Examples

use madsim::{runtime::Runtime, net::Endpoint};
use std::sync::Arc;
use std::net::SocketAddr;

let runtime = Runtime::new();
let addr1 = "10.0.0.1:1".parse::<SocketAddr>().unwrap();
let addr2 = "10.0.0.2:1".parse::<SocketAddr>().unwrap();
let node1 = runtime.create_node().ip(addr1.ip()).build();
let node2 = runtime.create_node().ip(addr2.ip()).build();
let barrier = Arc::new(tokio::sync::Barrier::new(2));
let barrier_ = barrier.clone();

node1.spawn(async move {
    let net = Endpoint::bind(addr1).await.unwrap();
    barrier_.wait().await;  // make sure addr2 has bound

    net.send_to(addr2, 1, &[1]).await.unwrap();
});

let f = node2.spawn(async move {
    let net = Endpoint::bind(addr2).await.unwrap();
    barrier.wait().await;

    let mut buf = vec![0; 0x10];
    let (len, from) = net.recv_from(1, &mut buf).await.unwrap();
    assert_eq!(from, addr1);
    assert_eq!(&buf[..len], &[1]);
});

runtime.block_on(f);

Modules

rpcrpc

RPC support.

a tokio Tcp Simulatior

Structs

Configmadsim

Network configurations.

An endpoint.

NetSimmadsim

Network simulator.

Statmadsim

Network statistics.

A TCP socket server, listening for connections.

A TCP stream between a local and a remote socket.

A UDP socket.

Traits

Converts or resolves without blocking to one or more SocketAddr values.

Functions

Performs a DNS resolution.

Type Definitions

Message sent to a network socket.