Skip to content

Commit 6fbd736

Browse files
committed
bind argument
1 parent bfbbd1d commit 6fbd736

File tree

2 files changed

+25
-7
lines changed

2 files changed

+25
-7
lines changed

src/main.rs

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,17 @@ fn main() {
5454
.multiple(true)
5555
.default_value("")
5656
)
57+
.arg(
58+
Arg::with_name("bind")
59+
.help("bind to the interface associated with the address <host>")
60+
.takes_value(true)
61+
.long("bind")
62+
.short("B")
63+
.value_name("host")
64+
.required(false)
65+
.multiple(true)
66+
.default_value("0.0.0.0")
67+
)
5768
.arg(
5869
Arg::with_name("debug")
5970
.help("emit debug-level logging on stderr; default is info and above")

src/server.rs

Lines changed: 14 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -401,15 +401,22 @@ pub fn serve(args: ArgMatches) -> BoxResult<()> {
401401
log::debug!("limiting service to {} concurrent clients", client_limit);
402402
}
403403

404-
//start listening for connections
405-
let port: u16 = args.value_of("port").unwrap().parse()?;
406-
let listener: TcpListener = if args.is_present("version6") {
407-
TcpListener::bind(&SocketAddr::new(IpAddr::V6(Ipv6Addr::UNSPECIFIED), port))
408-
.unwrap_or_else(|_| panic!("failed to bind TCP socket, port {}", port))
404+
let (unspec_str, unspec) = if args.is_present("version6") {
405+
("::", IpAddr::V6(Ipv6Addr::UNSPECIFIED))
409406
} else {
410-
TcpListener::bind(&SocketAddr::new(IpAddr::V4(Ipv4Addr::UNSPECIFIED), port))
411-
.unwrap_or_else(|_| panic!("failed to bind TCP socket, port {}", port))
407+
("0.0.0.0", IpAddr::V4(Ipv4Addr::UNSPECIFIED))
412408
};
409+
410+
let addr = args
411+
.value_of("bind")
412+
.unwrap_or(unspec_str)
413+
.parse::<IpAddr>()
414+
.unwrap_or(unspec);
415+
416+
//start listening for connections
417+
let port: u16 = args.value_of("port").unwrap().parse()?;
418+
let listener: TcpListener = TcpListener::bind(&SocketAddr::new(addr, port))
419+
.unwrap_or_else(|_| panic!("failed to bind TCP socket, port {}", port));
413420
log::info!("server listening on {}", listener.local_addr()?);
414421

415422
let mio_token = Token(0);

0 commit comments

Comments
 (0)