udp_buffer_test/
udp_buffer_test.rs

1/// Example demonstrating UDP socket optimizations (2MB buffer sizes)
2///
3/// This example demonstrates the UDP socket buffer improvements from issue #17.
4///
5/// To run this test:
6///
7/// 1. Start the server in one terminal:
8/// ```
9/// cargo run --release -- -s -p 5201
10/// ```
11///
12/// 2. Run this client in another terminal:
13/// ```
14/// cargo run --release --example udp_buffer_test
15/// ```
16use rperf3::{Client, Config, Protocol};
17use std::time::Duration;
18
19#[tokio::main]
20async fn main() -> Result<(), Box<dyn std::error::Error>> {
21    // Initialize logging
22    env_logger::Builder::from_env(env_logger::Env::default().default_filter_or("info")).init();
23
24    println!("UDP Socket Optimization Demo");
25    println!("============================\n");
26    println!("This demo tests UDP with:");
27    println!("- 2MB send/receive buffers");
28    println!("- Improved burst handling");
29    println!("- Expected 10-20% improvement with reduced packet loss\n");
30    println!("Note: Make sure the server is running first:");
31    println!("  cargo run --release -- -s -p 5201\n");
32
33    println!("Starting UDP test (5 seconds, 100 Mbps)...\n");
34
35    // Run client test with bandwidth limiting
36    let client_config = Config::client("127.0.0.1".to_string(), 5201)
37        .with_protocol(Protocol::Udp)
38        .with_duration(Duration::from_secs(5))
39        .with_interval(Duration::from_secs(1))
40        .with_bandwidth(100_000_000); // 100 Mbps
41
42    let client = Client::new(client_config)?;
43    client.run().await?;
44
45    // Get measurements
46    let measurements = client.get_measurements();
47    let total_bytes = measurements.total_bytes_sent + measurements.total_bytes_received;
48    let bits_per_second = measurements.total_bits_per_second();
49    let packet_loss = if measurements.total_packets > 0 {
50        (measurements.lost_packets as f64 / measurements.total_packets as f64) * 100.0
51    } else {
52        0.0
53    };
54
55    println!("\n=== Results ===");
56    println!(
57        "Total transferred: {:.2} MB",
58        total_bytes as f64 / 1_000_000.0
59    );
60    println!("Throughput: {:.2} Mbps", bits_per_second / 1_000_000.0);
61    println!("Packet loss: {:.2}%", packet_loss);
62    println!("\nSocket optimizations applied:");
63    println!("✓ Send buffer: 2MB");
64    println!("✓ Recv buffer: 2MB");
65    println!("✓ Reduced packet loss with larger buffers");
66
67    Ok(())
68}