Module madsim::net

source ·
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);

Re-exports§

  • pub use self::endpoint::Receiver;
  • pub use self::endpoint::Sender;
  • pub use self::unix::UnixDatagram;
  • pub use self::unix::UnixListener;
  • pub use self::unix::UnixStream;

Modules§

  • IP Virtual Server.
  • rpcrpc
    RPC support.
  • a tokio Tcp Simulatior

Structs§

Traits§

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

Functions§

Type Aliases§

  • Message sent to a network socket.