use std::{net::IpAddr, sync::Arc, time::Duration}; use futures_util::StreamExt; use massping::DualstackPinger; use tokio::time; #[tokio::main(flavor = "current_thread")] async fn main() { let localhost_v4: IpAddr = "127.0.0.1".parse().unwrap(); let one_one_one_one_v4: IpAddr = "1.1.1.1".parse().unwrap(); let not_answering_v4: IpAddr = "0.0.0.1".parse().unwrap(); let localhost_v6: IpAddr = "::1".parse().unwrap(); let one_one_one_one_v6: IpAddr = "2606:4700:4700::1111".parse().unwrap(); let pinger = Arc::new(DualstackPinger::new().expect("setup pinger")); let ips = [ localhost_v4, one_one_one_one_v4, not_answering_v4, localhost_v6, one_one_one_one_v6, ]; let mut interval = time::interval(Duration::from_secs(1)); loop { interval.tick().await; let pinger = Arc::clone(&pinger); tokio::spawn(async move { let _ = time::timeout(Duration::from_secs(5), async { let mut stream = pinger.measure_many(ips.into_iter()); while let Some((addr, took)) = stream.next().await { println!("{}: {:?}", addr, took); } }) .await; }); } }