diff --git a/src/main.rs b/src/main.rs index fb0dabd..2abf206 100644 --- a/src/main.rs +++ b/src/main.rs @@ -41,22 +41,26 @@ fn main() { ********************/ let mut message_rcv: Message; - let peer_addr = match config.peer { - Some(ref p) => format!("{}:{}", p.ip, p.port), + let mut peer = match config.peer { + Some(ref p) => { + let addr = format!("{}:{}", p.ip, p.port); + info!("Connecting to peer {}", addr); + Peer::new(addr, network.magic_bytes).expect("failed to connect to configured peer") + } None => network .dns_seeds .iter() - .find_map(|seed| { + .flat_map(|seed| { (*seed, network.port) .to_socket_addrs() - .ok()? - .next() - .map(|addr| addr.to_string()) + .unwrap_or_else(|_| vec![].into_iter()) + }) + .find_map(|addr| { + info!("Trying peer {}", addr); + Peer::new(addr.to_string(), network.magic_bytes).ok() }) - .expect("no DNS seed resolved to a valid address"), + .expect("could not connect to any peer from DNS seeds"), }; - info!("Connecting to peer {}", peer_addr); - let mut peer = Peer::new(peer_addr, network.magic_bytes); let mut current_height: u32 = 0; let mut hash = network.genesis_hash.to_vec(); diff --git a/src/networks.rs b/src/networks.rs index 39fc742..889f4d1 100644 --- a/src/networks.rs +++ b/src/networks.rs @@ -63,13 +63,12 @@ impl Network { testnet: true, magic_bytes: MagicBytes::LITECOIN_TESTNET, aux_pow: false, - port: 19333, + port: 19335, genesis_hash: [ 73, 102, 98, 90, 75, 40, 81, 217, 253, 238, 19, 158, 86, 33, 26, 13, 136, 87, 95, 89, 237, 129, 111, 245, 230, 166, 61, 235, 78, 62, 41, 160, ], dns_seeds: &[ - "seed-b.litecoin.loshan.co.uk", "dnsseed-testnet.thrasher.io", "testnet-seed.ltc.xurious.com", ], diff --git a/src/peer.rs b/src/peer.rs index 6bf0759..8a38f9f 100644 --- a/src/peer.rs +++ b/src/peer.rs @@ -20,8 +20,9 @@ pub struct Peer { } impl Peer { - pub fn new(ip: String, magic_bytes: [u8; 4]) -> Self { - let stream = TcpStream::connect(&ip).expect("Create TcpStream"); + pub fn new(ip: String, magic_bytes: [u8; 4]) -> Result> { + let addr: std::net::SocketAddr = ip.parse()?; + let stream = TcpStream::connect_timeout(&addr, Duration::from_secs(5))?; let (tx, rx) = channel::(); @@ -35,7 +36,7 @@ impl Peer { peer.start_thread(); - return peer; + Ok(peer) } pub fn start_thread(&mut self) -> thread::JoinHandle<()> {