@@ -424,12 +424,35 @@ async fn start_network(
424424 spawn ( event_loop. run ( ) ) ;
425425 spawn ( handle_network_events ( event_stream, app. clone ( ) ) ) ;
426426
427- client
428- . start_listening ( "/ip4/0.0.0.0/udp/0/quic-v1" . parse ( ) . unwrap ( ) )
429- . await
430- . expect ( "Listening not to fail." ) ;
427+ // Get IP and port from command line args, defaulting to 0.0.0.0:0
428+ let matches = cli:: commands:: get_args ( ) . get_matches ( ) ;
429+ let default_ip = "0.0.0.0" . to_string ( ) ;
430+ let default_port = "0" . to_string ( ) ;
431+ let ip = matches. get_one :: < String > ( "address" ) . unwrap_or ( & default_ip) ;
432+ let port = matches. get_one :: < String > ( "port" ) . unwrap_or ( & default_port) ;
433+
434+ let addr = format ! ( "/ip4/{ip}/udp/{port}/quic-v1" )
435+ . parse ( )
436+ . unwrap_or_else ( |e| {
437+ tracing:: error!( "Failed to parse listening address: {}" , e) ;
438+ eprintln ! ( "Error: Invalid listening address format. Please check your IP and port." ) ;
439+ std:: process:: exit ( 1 ) ;
440+ } ) ;
441+
442+ client. start_listening ( addr) . await . unwrap_or_else ( |e| {
443+ tracing:: error!( "Failed to start listening: {}" , e) ;
444+ eprintln ! (
445+ "Error: Could not start listening on the specified address. The port might be in use."
446+ ) ;
447+ std:: process:: exit ( 1 ) ;
448+ } ) ;
449+
450+ let listening_addrs: Vec < Multiaddr > = client. get_listening_addrs ( ) . await . unwrap_or_else ( |e| {
451+ tracing:: error!( "Failed to get listening addresses: {}" , e) ;
452+ eprintln ! ( "Error: Could not get listening addresses. Please try again." ) ;
453+ std:: process:: exit ( 1 ) ;
454+ } ) ;
431455
432- let listening_addrs: Vec < Multiaddr > = client. get_listening_addrs ( ) . await . unwrap ( ) ;
433456 {
434457 let mut app = app. lock ( ) ;
435458 app. listening_addrs = listening_addrs;
0 commit comments