mirror of
https://mirror.suhoan.cn/https://github.com/EasyTier/EasyTier.git
synced 2025-12-15 14:17:24 +08:00
fix bugs (#1138)
1. avoid dns query hangs the thread 2. avoid deadloop when stun query failed because of no ipv4 addr. 3. make quic input error non-fatal. 4. remove ring tunnel from connection map to avoid mem leak. 5. limit listener retry count.
This commit is contained in:
@@ -12,7 +12,10 @@ use std::{
|
||||
};
|
||||
|
||||
use crate::{
|
||||
common::{error::Error, global_ctx::ArcGlobalCtx, stun::StunInfoCollectorTrait, PeerId},
|
||||
common::{
|
||||
dns::socket_addrs, error::Error, global_ctx::ArcGlobalCtx, stun::StunInfoCollectorTrait,
|
||||
PeerId,
|
||||
},
|
||||
peers::{
|
||||
peer_conn::PeerConnId,
|
||||
peer_manager::PeerManager,
|
||||
@@ -281,14 +284,14 @@ impl DirectConnectorManagerData {
|
||||
}
|
||||
}
|
||||
|
||||
fn spawn_direct_connect_task(
|
||||
async fn spawn_direct_connect_task(
|
||||
self: &Arc<DirectConnectorManagerData>,
|
||||
dst_peer_id: PeerId,
|
||||
ip_list: &GetIpListResponse,
|
||||
listener: &url::Url,
|
||||
tasks: &mut JoinSet<Result<(), Error>>,
|
||||
) {
|
||||
let Ok(mut addrs) = listener.socket_addrs(|| None) else {
|
||||
let Ok(mut addrs) = socket_addrs(listener, || None).await else {
|
||||
tracing::error!(?listener, "failed to parse socket address from listener");
|
||||
return;
|
||||
};
|
||||
@@ -432,7 +435,8 @@ impl DirectConnectorManagerData {
|
||||
&ip_list,
|
||||
&listener,
|
||||
&mut tasks,
|
||||
);
|
||||
)
|
||||
.await;
|
||||
|
||||
listener_list.push(listener.clone().to_string());
|
||||
available_listeners.pop();
|
||||
|
||||
@@ -15,7 +15,7 @@ use tokio::{
|
||||
};
|
||||
|
||||
use crate::{
|
||||
common::{join_joinset_background, PeerId},
|
||||
common::{dns::socket_addrs, join_joinset_background, PeerId},
|
||||
peers::peer_conn::PeerConnId,
|
||||
proto::{
|
||||
cli::{
|
||||
@@ -373,7 +373,7 @@ impl ManualConnectorManager {
|
||||
if u.scheme() == "ring" || u.scheme() == "txt" || u.scheme() == "srv" {
|
||||
ip_versions.push(IpVersion::Both);
|
||||
} else {
|
||||
let addrs = match u.socket_addrs(|| Some(1000)) {
|
||||
let addrs = match socket_addrs(&u, || Some(1000)).await {
|
||||
Ok(addrs) => addrs,
|
||||
Err(e) => {
|
||||
data.global_ctx.issue_event(GlobalCtxEvent::ConnectError(
|
||||
|
||||
@@ -270,7 +270,7 @@ impl UdpHoePunchConnectorData {
|
||||
|
||||
#[tracing::instrument(skip(self))]
|
||||
async fn cone_to_cone(self: Arc<Self>, task_info: PunchTaskInfo) -> Result<(), Error> {
|
||||
let mut backoff = BackOff::new(vec![0, 1000, 2000, 4000, 4000, 8000, 8000, 16000]);
|
||||
let mut backoff = BackOff::new(vec![1000, 1000, 2000, 4000, 4000, 8000, 8000, 16000]);
|
||||
|
||||
loop {
|
||||
backoff.sleep_for_next_backoff().await;
|
||||
@@ -293,7 +293,8 @@ impl UdpHoePunchConnectorData {
|
||||
|
||||
#[tracing::instrument(skip(self))]
|
||||
async fn sym_to_cone(self: Arc<Self>, task_info: PunchTaskInfo) -> Result<(), Error> {
|
||||
let mut backoff = BackOff::new(vec![0, 1000, 2000, 4000, 4000, 8000, 8000, 16000, 64000]);
|
||||
let mut backoff =
|
||||
BackOff::new(vec![1000, 1000, 2000, 4000, 4000, 8000, 8000, 16000, 64000]);
|
||||
let mut round = 0;
|
||||
let mut port_idx = rand::random();
|
||||
|
||||
@@ -338,7 +339,8 @@ impl UdpHoePunchConnectorData {
|
||||
|
||||
#[tracing::instrument(skip(self))]
|
||||
async fn both_easy_sym(self: Arc<Self>, task_info: PunchTaskInfo) -> Result<(), Error> {
|
||||
let mut backoff = BackOff::new(vec![0, 1000, 2000, 4000, 4000, 8000, 8000, 16000, 64000]);
|
||||
let mut backoff =
|
||||
BackOff::new(vec![1000, 1000, 2000, 4000, 4000, 8000, 8000, 16000, 64000]);
|
||||
|
||||
loop {
|
||||
backoff.sleep_for_next_backoff().await;
|
||||
|
||||
Reference in New Issue
Block a user