#![allow(dead_code)]
use rand::Rng;
use std::net::{SocketAddr, TcpListener};
pub const PORT_RANGE_START: u16 = 50000;
pub const PORT_RANGE_END: u16 = 50999;
pub fn find_available_port() -> u16 {
let mut rng = rand::rng();
for _ in 0..100 {
let port = rng.random_range(PORT_RANGE_START..=PORT_RANGE_END);
let addr: SocketAddr = ([0, 0, 0, 0], port).into();
if TcpListener::bind(addr).is_ok() {
return port;
}
}
for port in PORT_RANGE_START..=PORT_RANGE_END {
let addr: SocketAddr = ([0, 0, 0, 0], port).into();
if TcpListener::bind(addr).is_ok() {
return port;
}
}
panic!(
"Could not find an available port in range {}-{}",
PORT_RANGE_START, PORT_RANGE_END
);
}
pub fn is_port_available(port: u16) -> bool {
let addr: SocketAddr = ([0, 0, 0, 0], port).into();
TcpListener::bind(addr).is_ok()
}