@@ -207,7 +207,7 @@ const WALLET_KEYS_SEED_LEN: usize = 64;
207207/// | `storage_dir_path` | /tmp/ldk_node/ |
208208/// | `log_dir_path` | None |
209209/// | `network` | Bitcoin |
210- /// | `listening_address` | None |
210+ /// | `listening_addresses` | None |
211211/// | `default_cltv_expiry_delta` | 144 |
212212/// | `onchain_wallet_sync_interval_secs` | 80 |
213213/// | `wallet_sync_interval_secs` | 30 |
@@ -225,8 +225,8 @@ pub struct Config {
225225 pub log_dir_path : Option < String > ,
226226 /// The used Bitcoin network.
227227 pub network : Network ,
228- /// The IP address and TCP port the node will listen on .
229- pub listening_address : Option < SocketAddress > ,
228+ /// The addresses on which the node will listen for incoming connections .
229+ pub listening_addresses : Option < Vec < SocketAddress > > ,
230230 /// The default CLTV expiry delta to be used for payments.
231231 pub default_cltv_expiry_delta : u32 ,
232232 /// The time in-between background sync attempts of the onchain wallet, in seconds.
@@ -264,7 +264,7 @@ impl Default for Config {
264264 storage_dir_path : DEFAULT_STORAGE_DIR_PATH . to_string ( ) ,
265265 log_dir_path : None ,
266266 network : DEFAULT_NETWORK ,
267- listening_address : None ,
267+ listening_addresses : None ,
268268 default_cltv_expiry_delta : DEFAULT_CLTV_EXPIRY_DELTA ,
269269 onchain_wallet_sync_interval_secs : DEFAULT_BDK_WALLET_SYNC_INTERVAL_SECS ,
270270 wallet_sync_interval_secs : DEFAULT_LDK_WALLET_SYNC_INTERVAL_SECS ,
@@ -490,38 +490,33 @@ impl<K: KVStore + Sync + Send + 'static> Node<K> {
490490 } ) ;
491491 }
492492
493- if let Some ( listening_address ) = & self . config . listening_address {
493+ if let Some ( listening_addresses ) = & self . config . listening_addresses {
494494 // Setup networking
495495 let peer_manager_connection_handler = Arc :: clone ( & self . peer_manager ) ;
496496 let mut stop_listen = self . stop_receiver . clone ( ) ;
497- let listening_address = listening_address. clone ( ) ;
498497 let listening_logger = Arc :: clone ( & self . logger ) ;
499498
500- let bind_addr = listening_address
501- . to_socket_addrs ( )
502- . map_err ( |_| {
503- log_error ! (
504- self . logger,
505- "Unable to resolve listing address: {:?}" ,
506- listening_address
507- ) ;
508- Error :: InvalidSocketAddress
509- } ) ?
510- . next ( )
511- . ok_or_else ( || {
499+ let mut bind_addrs = Vec :: with_capacity ( listening_addresses. len ( ) ) ;
500+
501+ for listening_addr in listening_addresses {
502+ let resolved_address = listening_addr. to_socket_addrs ( ) . map_err ( |e| {
512503 log_error ! (
513504 self . logger,
514- "Unable to resolve listing address: {:?}" ,
515- listening_address
505+ "Unable to resolve listening address: {:?}. Error details: {}" ,
506+ listening_addr,
507+ e,
516508 ) ;
517509 Error :: InvalidSocketAddress
518510 } ) ?;
519511
512+ bind_addrs. extend ( resolved_address) ;
513+ }
514+
520515 runtime. spawn ( async move {
521516 let listener =
522- tokio:: net:: TcpListener :: bind ( bind_addr ) . await
517+ tokio:: net:: TcpListener :: bind ( & * bind_addrs ) . await
523518 . unwrap_or_else ( |e| {
524- log_error ! ( listening_logger, "Failed to bind to listen address/port - is something else already listening on it?: {}" , e) ;
519+ log_error ! ( listening_logger, "Failed to bind to listen addresses/ports - is something else already listening on it?: {}" , e) ;
525520 panic ! (
526521 "Failed to bind to listen address/port - is something else already listening on it?" ,
527522 ) ;
@@ -631,8 +626,13 @@ impl<K: KVStore + Sync + Send + 'static> Node<K> {
631626 continue ;
632627 }
633628
634- let addresses =
635- bcast_config. listening_address. iter( ) . cloned( ) . collect( ) ;
629+ let addresses = bcast_config. listening_addresses. clone( ) . unwrap_or( Vec :: new( ) ) ;
630+
631+ if addresses. is_empty( ) {
632+ // Skip if we are not listening on any addresses.
633+ continue ;
634+ }
635+
636636 bcast_pm. broadcast_node_announcement( [ 0 ; 3 ] , [ 0 ; 32 ] , addresses) ;
637637
638638 let unix_time_secs = SystemTime :: now( ) . duration_since( SystemTime :: UNIX_EPOCH ) . unwrap( ) . as_secs( ) ;
@@ -781,9 +781,9 @@ impl<K: KVStore + Sync + Send + 'static> Node<K> {
781781 self . channel_manager . get_our_node_id ( )
782782 }
783783
784- /// Returns our own listening address .
785- pub fn listening_address ( & self ) -> Option < SocketAddress > {
786- self . config . listening_address . clone ( )
784+ /// Returns our own listening addresses .
785+ pub fn listening_addresses ( & self ) -> Option < Vec < SocketAddress > > {
786+ self . config . listening_addresses . clone ( )
787787 }
788788
789789 /// Retrieve a new on-chain/funding address.
0 commit comments