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> { async fn accept(&mut self) -> Result<Box<dyn Tunnel>, super::TunnelError> {
// accept a single connection // accept a single connection
let incoming_conn = self.endpoint.as_ref().unwrap().accept().await.unwrap(); let conn = loop {
let conn = incoming_conn.await.unwrap(); let Some(incoming_conn) = self.endpoint.as_ref().unwrap().accept().await else {
println!( tokio::time::sleep(Duration::from_millis(100)).await;
"[server] connection accepted: addr={}", continue;
conn.remote_address() };
); 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 remote_addr = conn.remote_address();
let (w, r) = conn.accept_bi().await.with_context(|| "accept_bi failed")?; 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()); endpoint.set_default_client_config(configure_client());
// connect to server // connect to server
let connection = endpoint.connect(addr, "localhost").unwrap().await.unwrap(); let connection = endpoint
println!("[client] connected: addr={}", connection.remote_address()); .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); self.endpoint = Some(endpoint);