From 1d8f3b5dafcb147a6a9db51c4d6f7a12244b05ec Mon Sep 17 00:00:00 2001 From: moznion Date: Mon, 23 Nov 2020 11:40:22 +0900 Subject: [PATCH] Use tokio::select --- src/server.rs | 51 ++++++++++++++++++++++++++++----------------------- 1 file changed, 28 insertions(+), 23 deletions(-) diff --git a/src/server.rs b/src/server.rs index 6ea10df..bfd22bf 100644 --- a/src/server.rs +++ b/src/server.rs @@ -39,31 +39,36 @@ impl Server { loop { let conn = conn_arc.clone(); - let (size, remote_addr) = conn.recv_from(&mut buf).await?; - let request_data = buf[..size].to_vec(); + tokio::select! { + received = conn.recv_from(&mut buf) => { + let (size, remote_addr) = received?; - let local_addr = match conn.local_addr() { - Ok(addr) => addr, - Err(e) => { - error!("failed to get a local address from from a connection; {}", e); - continue; + let request_data = buf[..size].to_vec(); + + let local_addr = match conn.local_addr() { + Ok(addr) => addr, + Err(e) => { + error!("failed to get a local address from from a connection; {}", e); + continue; + } + }; + + let undergoing_requests_lock = undergoing_requests_lock_arc.clone(); + + tokio::spawn(async move { + Self::process_request( + conn, + &request_data, + local_addr, + remote_addr, + undergoing_requests_lock, + self.request_handler, + self.secret_provider, + self.skip_authenticity_validation, + ).await; + }); } - }; - - let undergoing_requests_lock = undergoing_requests_lock_arc.clone(); - - tokio::spawn(async move { - Self::process_request( - conn, - &request_data, - local_addr, - remote_addr, - undergoing_requests_lock, - self.request_handler, - self.secret_provider, - self.skip_authenticity_validation, - ).await; - }); + } } }