multiple_addresses/
multiple_addresses.rs

1use axum::{routing::get, Router};
2use futures_util::future::try_join_all;
3use std::net::{Ipv4Addr, Ipv6Addr, SocketAddr};
4
5#[tokio::main]
6async fn main() {
7    let servers = vec![
8        SocketAddr::new(Ipv4Addr::LOCALHOST.into(), 3000),
9        SocketAddr::new(Ipv6Addr::LOCALHOST.into(), 3000),
10    ]
11    .into_iter()
12    .map(|addr| tokio::spawn(start_server(addr)));
13
14    // Returns the first error if any of the servers return an error.
15    try_join_all(servers).await.unwrap();
16}
17
18async fn start_server(addr: SocketAddr) {
19    let app = Router::new().route("/", get(|| async { "Hello, world!" }));
20
21    axum_server::bind(addr)
22        .serve(app.into_make_service())
23        .await
24        .unwrap();
25}