aboutsummaryrefslogtreecommitdiffstats
path: root/src/args.rs
diff options
context:
space:
mode:
authorIsaac Parker <parrotmac@gmail.com>2020-06-28 20:03:31 +0000
committerIsaac Parker <parrotmac@gmail.com>2020-06-28 20:03:31 +0000
commitaa503c46c384c13fb02bf0cc98438336a161fcd4 (patch)
treeac6f8b3376946d1801273f125967004d0cb62d2a /src/args.rs
parentMake clippy and cargo fmt happy (diff)
downloadminiserve-aa503c46c384c13fb02bf0cc98438336a161fcd4.tar.gz
miniserve-aa503c46c384c13fb02bf0cc98438336a161fcd4.zip
Bind to random port when port 0 specified
Diffstat (limited to '')
-rw-r--r--src/args.rs8
1 files changed, 7 insertions, 1 deletions
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,