|
@@ -20,12 +20,13 @@ use std::{
|
|
|
collections::{HashMap, HashSet},
|
|
collections::{HashMap, HashSet},
|
|
|
hash::{Hash, Hasher},
|
|
hash::{Hash, Hasher},
|
|
|
sync::Arc,
|
|
sync::Arc,
|
|
|
|
|
+ time::Duration,
|
|
|
};
|
|
};
|
|
|
|
|
|
|
|
use async_trait::async_trait;
|
|
use async_trait::async_trait;
|
|
|
use darkfi::{
|
|
use darkfi::{
|
|
|
net::{connector::Connector, session::Session, ChannelPtr, Message, P2pPtr},
|
|
net::{connector::Connector, session::Session, ChannelPtr, Message, P2pPtr},
|
|
|
- system::{sleep, ExecutorPtr},
|
|
|
|
|
|
|
+ system::{sleep, timeout::timeout, ExecutorPtr},
|
|
|
util::time::Timestamp,
|
|
util::time::Timestamp,
|
|
|
Error, Result,
|
|
Error, Result,
|
|
|
};
|
|
};
|
|
@@ -513,7 +514,11 @@ pub trait DhtHandler {
|
|
|
let session_weak = Arc::downgrade(&self.dht().p2p.session_outbound());
|
|
let session_weak = Arc::downgrade(&self.dht().p2p.session_outbound());
|
|
|
|
|
|
|
|
let connector = Connector::new(self.dht().p2p.settings(), session_weak);
|
|
let connector = Connector::new(self.dht().p2p.settings(), session_weak);
|
|
|
- let connect_res = connector.connect(&addr).await;
|
|
|
|
|
|
|
+ let dur = Duration::from_secs(self.dht().timeout);
|
|
|
|
|
+ let Ok(connect_res) = timeout(dur, connector.connect(&addr)).await else {
|
|
|
|
|
+ warn!(target: "dht::DhtHandler::get_channel()", "Timeout trying to connect to {}", addr);
|
|
|
|
|
+ return Err(Error::ConnectTimeout);
|
|
|
|
|
+ };
|
|
|
if connect_res.is_err() {
|
|
if connect_res.is_err() {
|
|
|
warn!(target: "dht::DhtHandler::get_channel()", "Error while connecting to {}: {}", addr, connect_res.unwrap_err());
|
|
warn!(target: "dht::DhtHandler::get_channel()", "Error while connecting to {}: {}", addr, connect_res.unwrap_err());
|
|
|
continue;
|
|
continue;
|