# Connect to Peers
In this section you'll learn how to join the lightning network.
Firstly we need to have the ability to do high performance I/O operations. LDK provides default implementations for initializing all of your networking needs. If you are using Rust, you can use our simple socket handling library lightning_net_tokio
. In Kotlin/Java you can use the NioPeerHandler
which uses Java's NIO I/O interface.
What it's used for: making peer connections, facilitating peer data to and from LDK
- Rust
- Kotlin
- Swift
use lightning_net_tokio; // use LDK's sample networking module let listen_port = 9735; let listener = tokio::net::TcpListener::bind(format!("0.0.0.0:{}", listen_port)) .await.unwrap() loop { let tcp_stream = listener.accept().await.unwrap().0; tokio::spawn(async move { // Use LDK's supplied networking battery to facilitate inbound // connections. lightning_net_tokio::setup_inbound( &peer_manager, tcp_stream.into_std().unwrap(), ) .await; }); }
Copied!
Connections to other peers are established with PeerManager
. You'll need to know the pubkey and address of another node that you want as a peer. Once the connection is established and the handshake is complete, PeerManager
will show the peer's pubkey in its list of peers.
- Rust
- Kotlin
- Swift
match lightning_net_tokio::connect_outbound(Arc::clone(&peer_manager), pubkey, address).await { Some(connection_closed_future) => { let mut connection_closed_future = Box::pin(connection_closed_future); loop { // Make sure the connection is still established. match futures::poll!(&mut connection_closed_future) { std::task::Poll::Ready(_) => { panic!("ERROR: Peer disconnected before handshake completed"); } std::task::Poll::Pending => {} } // Wait for the handshake to complete. match peer_manager.get_peer_node_ids().iter().find(|id| **id == pubkey) { Some(_) => break, None => tokio::time::sleep(std::time::Duration::from_millis(10)).await, } } } None => panic!("ERROR: Failed to connect to peer"), }
Copied!
Dependencies: PeerManager
References: Rust lightning-net-tokio
docs (opens new window), Rust PeerManager
docs (opens new window), Java/Kotlin NioPeerHandler
bindings (opens new window),
Java/Kotlin PeerManager
bindings (opens new window),