11use std:: collections:: HashMap ;
22use std:: ffi:: OsStr ;
3- use std:: net:: SocketAddr ;
3+ use std:: net:: { IpAddr , SocketAddr } ;
44use std:: ops:: Range ;
55use std:: path:: { Path , PathBuf } ;
66use std:: str:: FromStr ;
@@ -26,6 +26,7 @@ use crate::shared::ctrl_c::CtrlC;
2626
2727#[ derive( Clone , Debug ) ]
2828pub struct ServerProps {
29+ pub address : IpAddr ,
2930 pub port_selection : PortSelection ,
3031 pub verbose : bool ,
3132 pub open_in_browser : bool ,
@@ -40,6 +41,7 @@ pub async fn start_server_main(
4041 start_server (
4142 Some ( file) ,
4243 libinfo_map,
44+ props. address ,
4345 props. port_selection ,
4446 props. verbose ,
4547 props. open_in_browser ,
@@ -70,11 +72,12 @@ impl PortSelection {
7072async fn start_server (
7173 profile_filename : Option < & Path > ,
7274 libinfo_map : HashMap < ( String , DebugId ) , LibraryInfo > ,
75+ address : IpAddr ,
7376 port_selection : PortSelection ,
7477 verbose : bool ,
7578 open_in_browser : bool ,
7679) {
77- let ( listener, addr) = make_listener ( port_selection) . await ;
80+ let ( listener, addr) = make_listener ( address , port_selection) . await ;
7881
7982 let token = generate_token ( ) ;
8083 let path_prefix = format ! ( "/{token}" ) ;
@@ -179,10 +182,10 @@ fn generate_token() -> String {
179182 nix_base32:: to_nix_base32 ( & bytes)
180183}
181184
182- async fn make_listener ( port_selection : PortSelection ) -> ( TcpListener , SocketAddr ) {
185+ async fn make_listener ( addr : IpAddr , port_selection : PortSelection ) -> ( TcpListener , SocketAddr ) {
183186 match port_selection {
184187 PortSelection :: OnePort ( port) => {
185- let addr = SocketAddr :: from ( ( [ 127 , 0 , 0 , 1 ] , port) ) ;
188+ let addr = SocketAddr :: from ( ( addr , port) ) ;
186189 match TcpListener :: bind ( & addr) . await {
187190 Ok ( listener) => ( listener, addr) ,
188191 Err ( e) => {
@@ -194,7 +197,7 @@ async fn make_listener(port_selection: PortSelection) -> (TcpListener, SocketAdd
194197 PortSelection :: TryMultiple ( range) => {
195198 let mut error = None ;
196199 for port in range. clone ( ) {
197- let addr = SocketAddr :: from ( ( [ 127 , 0 , 0 , 1 ] , port) ) ;
200+ let addr = SocketAddr :: from ( ( addr , port) ) ;
198201 match TcpListener :: bind ( & addr) . await {
199202 Ok ( listener) => return ( listener, addr) ,
200203 Err ( e) => {
0 commit comments