-async fn connect_peer(current_peer: (PublicKey, SocketAddr), peer_manager: GossipPeerManager) -> bool {
- eprintln!("Connecting to peer {}@{}...", current_peer.0.to_hex(), current_peer.1.to_string());
- let connection = lightning_net_tokio::connect_outbound(
- Arc::clone(&peer_manager),
- current_peer.0,
- current_peer.1,
- ).await;
- if let Some(disconnection_future) = connection {
- eprintln!("Connected to peer {}@{}!", current_peer.0.to_hex(), current_peer.1.to_string());
- tokio::spawn(async move {
- disconnection_future.await;
- loop {
- eprintln!("Reconnecting to peer {}@{}...", current_peer.0.to_hex(), current_peer.1.to_string());
- if let Some(disconnection_future) = lightning_net_tokio::connect_outbound(
- Arc::clone(&peer_manager),
- current_peer.0,
- current_peer.1,
- ).await {
- disconnection_future.await;
- } else {
- tokio::time::sleep(Duration::from_secs(10)).await;
+async fn connect_peer<L: Deref + Clone + Send + Sync + 'static>(current_peer: (PublicKey, SocketAddr), peer_manager: GossipPeerManager<L>, logger: L) -> bool where L::Target: Logger {
+ // we seek to find out if the first connection attempt was successful
+ let (sender, mut receiver) = mpsc::channel::<bool>(1);
+ tokio::spawn(async move {
+ let current_peer_pubkey_hex = current_peer.0.serialize().to_lower_hex_string();
+ log_info!(logger, "Connecting to peer {}@{}...", current_peer_pubkey_hex, current_peer.1);
+ let mut is_first_iteration = true;
+ loop {
+ if let Some(disconnection_future) = lightning_net_tokio::connect_outbound(
+ Arc::clone(&peer_manager),
+ current_peer.0,
+ current_peer.1,
+ ).await {
+ log_info!(logger, "Connected to peer {}@{}!", current_peer_pubkey_hex, current_peer.1);
+ if is_first_iteration {
+ sender.send(true).await.unwrap();
+ }
+ disconnection_future.await;
+ log_warn!(logger, "Disconnected from peer {}@{}", current_peer_pubkey_hex, current_peer.1);
+ } else {
+ log_warn!(logger, "Failed to connect to peer {}@{}!", current_peer_pubkey_hex, current_peer.1);
+ if is_first_iteration {
+ sender.send(false).await.unwrap();