From aa503c46c384c13fb02bf0cc98438336a161fcd4 Mon Sep 17 00:00:00 2001 From: Isaac Parker Date: Sun, 28 Jun 2020 14:03:31 -0600 Subject: Bind to random port when port 0 specified --- src/args.rs | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) (limited to 'src') diff --git a/src/args.rs b/src/args.rs index 7e30ee1..a5bcfea 100644 --- a/src/args.rs +++ b/src/args.rs @@ -1,6 +1,7 @@ use std::net::{IpAddr, Ipv4Addr, Ipv6Addr}; use std::path::PathBuf; use structopt::StructOpt; +use port_check::free_local_port; use crate::auth; use crate::errors::ContextualError; @@ -170,10 +171,15 @@ pub fn parse_args() -> crate::MiniserveConfig { let path_explicitly_chosen = args.path.is_some(); + let port = match args.port { + 0 => free_local_port().expect("no free ports available"), + _ => args.port, + }; + crate::MiniserveConfig { verbose: args.verbose, path: args.path.unwrap_or_else(|| PathBuf::from(".")), - port: args.port, + port, interfaces, auth: args.auth, path_explicitly_chosen, -- cgit v1.2.3