增加代理超时时间

This commit is contained in:
lubeilin
2023-09-17 19:52:54 +08:00
parent 29945eb3da
commit 5e018801db
+40 -15
View File
@@ -2,6 +2,7 @@ use dashmap::DashMap;
use std::io;
use std::net::{SocketAddr, SocketAddrV4};
use std::sync::Arc;
use std::time::Duration;
use tokio::net::{TcpListener, TcpStream};
@@ -30,19 +31,36 @@ impl TcpProxy {
if let Some(entry) = tcp_proxy_map.get(&sender_addr) {
let dest_addr = *entry.value();
drop(entry);
let peer_tcp_stream = match TcpStream::connect(dest_addr).await {
Ok(peer_tcp_stream) => peer_tcp_stream,
Err(e) => {
log::warn!(
"tcp代理异常:{:?},来源:{},目标:{}",
e,
sender_addr,
dest_addr
);
continue;
}
};
tokio::spawn(async move {
let peer_tcp_stream = match tokio::time::timeout(
Duration::from_secs(5),
TcpStream::connect(dest_addr),
)
.await
{
Ok(peer_tcp_stream) => match peer_tcp_stream {
Ok(peer_tcp_stream) => peer_tcp_stream,
Err(e) => {
log::warn!(
"tcp代理异常:{:?},来源:{},目标:{}",
e,
sender_addr,
dest_addr
);
return;
}
},
Err(e) => {
log::warn!(
"tcp代理异常:{:?},来源:{},目标:{}",
e,
sender_addr,
dest_addr
);
return;
}
};
if let Err(e) = proxy(tcp_stream, peer_tcp_stream).await {
log::warn!("{}->{},{}", sender_addr, dest_addr, e);
}
@@ -68,8 +86,15 @@ async fn proxy(mut client: TcpStream, mut server: TcpStream) -> io::Result<()> {
let client_to_server = tokio::io::copy(&mut client_reader, &mut server_writer);
let server_to_client = tokio::io::copy(&mut server_reader, &mut client_writer);
let (r1, r2) = tokio::join!(client_to_server, server_to_client);
r1?;
r2?;
let (r1, r2) = tokio::join!(
tokio::time::timeout(Duration::from_secs(10), client_to_server),
tokio::time::timeout(Duration::from_secs(10), server_to_client)
);
if let Ok(r) = r1 {
r?;
}
if let Ok(r) = r2 {
r?;
}
Ok(())
}