find_port 0.1.4

Find an available TCP/UDP port — library and CLI tool
Documentation
use std::{env, process};

const DEFAULT_HOST: &str = "127.0.0.1";

fn main() {
    let args: Vec<String> = env::args().collect();

    let (host, start_port) = match args.len() {
        2 => {
            // find_port <port>
            (DEFAULT_HOST, parse_port(&args[1]))
        }
        3 => {
            // find_port <host> <port>
            (args[1].as_str(), parse_port(&args[2]))
        }
        _ => {
            eprintln!("Usage: find_port [host] <port>");
            eprintln!();
            eprintln!("Examples:");
            eprintln!("  find_port 8888                # Find available port starting from 8888 on 127.0.0.1");
            eprintln!("  find_port 0.0.0.0 3000       # Find available port starting from 3000 on 0.0.0.0");
            process::exit(1);
        }
    };

    match find_port::find_port(host, start_port) {
        Some(port) => {
            println!("{port}");
        }
        None => {
            eprintln!("Error: no available port found starting from {start_port}");
            process::exit(1);
        }
    }
}

fn parse_port(s: &str) -> u16 {
    s.parse().unwrap_or_else(|_| {
        eprintln!("Error: '{s}' is not a valid port number (0–65535)");
        process::exit(1);
    })
}