diff --git a/relay-server/src/main.rs b/relay-server/src/main.rs index d7128ff..e8c3029 100644 --- a/relay-server/src/main.rs +++ b/relay-server/src/main.rs @@ -6,6 +6,7 @@ use std::sync::atomic::{AtomicU64, Ordering}; use anyhow::{Context, Result}; use dashmap::DashMap; use quinn::{Endpoint, ServerConfig, TransportConfig}; +use quinn::crypto::rustls::QuicServerConfig; use rcgen::{CertifiedKey, generate_simple_self_signed}; use rustls::pki_types::{CertificateDer, PrivateKeyDer, PrivatePkcs8KeyDer}; use tokio::io::{AsyncReadExt, AsyncWriteExt}; @@ -89,8 +90,10 @@ async fn main() -> Result<()> { } async fn run_ping_responder(addr: SocketAddr) -> Result<()> { - let socket = UdpSocket::bind(format!("0.0.0.0:{}", addr.port() + 10000)).await - .or_else(|_| async { UdpSocket::bind("0.0.0.0:0").await })?; + let socket = match UdpSocket::bind(format!("0.0.0.0:{}", addr.port() + 10000)).await { + Ok(s) => s, + Err(_) => UdpSocket::bind("0.0.0.0:0").await?, + }; info!("Ping responder listening on {}", socket.local_addr()?); @@ -130,7 +133,9 @@ fn build_server_config() -> Result { transport.max_idle_timeout(Some(Duration::from_secs(60).try_into()?)); transport.keep_alive_interval(Some(Duration::from_secs(10))); - let mut server_config = ServerConfig::with_crypto(Arc::new(server_crypto)); + let quic_crypto = QuicServerConfig::try_from(Arc::new(server_crypto)) + .context("rustls 配置转为 QUIC 失败")?; + let mut server_config = ServerConfig::with_crypto(Arc::new(quic_crypto)); server_config.transport_config(Arc::new(transport)); Ok(server_config)