fix quic transport panic (#1216)

This commit is contained in:
Sijie.Sun
2025-08-11 08:30:59 +08:00
committed by GitHub
parent 975ca8bd9c
commit 1de7777a71

View File

@@ -168,12 +168,25 @@ impl TunnelListener for QUICTunnelListener {
async fn accept(&mut self) -> Result<Box<dyn Tunnel>, super::TunnelError> {
// accept a single connection
let incoming_conn = self.endpoint.as_ref().unwrap().accept().await.unwrap();
let conn = incoming_conn.await.unwrap();
println!(
"[server] connection accepted: addr={}",
conn.remote_address()
);
let conn = loop {
let Some(incoming_conn) = self.endpoint.as_ref().unwrap().accept().await else {
tokio::time::sleep(Duration::from_millis(100)).await;
continue;
};
match incoming_conn.await {
Ok(conn) => {
tracing::info!(
"[server] connection accepted: addr={}",
conn.remote_address()
);
break conn;
}
Err(e) => {
tracing::error!("[server] accept connection failed: {:?}", e);
tokio::time::sleep(Duration::from_millis(100)).await;
}
}
};
let remote_addr = conn.remote_address();
let (w, r) = conn.accept_bi().await.with_context(|| "accept_bi failed")?;
@@ -231,10 +244,14 @@ impl TunnelConnector for QUICTunnelConnector {
endpoint.set_default_client_config(configure_client());
// connect to server
let connection = endpoint.connect(addr, "localhost").unwrap().await.unwrap();
println!("[client] connected: addr={}", connection.remote_address());
let connection = endpoint
.connect(addr, "localhost")
.unwrap()
.await
.with_context(|| "connect failed")?;
tracing::info!("[client] connected: addr={}", connection.remote_address());
let local_addr = endpoint.local_addr().unwrap();
let local_addr = endpoint.local_addr()?;
self.endpoint = Some(endpoint);