Skip to main content

basic_server/
basic_server.rs

1//! Basic single-listener server example.
2//!
3//! Binds one [`Server`] on an ephemeral loopback port, serves it for a short
4//! fixed window, and shuts down. A real deployment would normally bind a
5//! fixed port and run until an external shutdown signal.
6//!
7//! Run with:
8//!
9//! ```text
10//! cargo run -p irtt-server --example basic_server
11//! ```
12
13use std::net::{IpAddr, Ipv4Addr, SocketAddr};
14use std::time::Duration;
15
16use irtt_server::{Server, ServerConfig};
17
18#[tokio::main(flavor = "current_thread")]
19async fn main() {
20    let bind_addr = SocketAddr::new(IpAddr::V4(Ipv4Addr::LOCALHOST), 0);
21    let config = ServerConfig::default();
22
23    let mut server = match Server::bind(bind_addr, config).await {
24        Ok(server) => server,
25        Err(err) => {
26            eprintln!("failed to bind server: {err}");
27            return;
28        }
29    };
30
31    println!(
32        "listening on {}",
33        server
34            .local_addr()
35            .expect("bound socket has a local address")
36    );
37
38    let result = server.run(tokio::time::sleep(Duration::from_secs(2))).await;
39    if let Err(err) = result {
40        eprintln!("server stopped with an error: {err}");
41    }
42}