From 49bec2d6aacb50958875a7a73b98d0043b22bc2e Mon Sep 17 00:00:00 2001 From: lubeilin <1791778603@qq.com> Date: Mon, 6 May 2024 20:02:40 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BD=BF=E7=94=A8anyhow=E6=9B=BF=E6=8D=A2?= =?UTF-8?q?=E9=83=A8=E5=88=86=E5=A4=84=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- vnt/src/channel/mod.rs | 47 +++++++++++++++++----------------- vnt/src/core/conn.rs | 3 +-- vnt/src/util/mod.rs | 2 -- vnt/src/util/result_convert.rs | 10 -------- 4 files changed, 24 insertions(+), 38 deletions(-) delete mode 100644 vnt/src/util/result_convert.rs diff --git a/vnt/src/channel/mod.rs b/vnt/src/channel/mod.rs index 2cb84af..5373f48 100644 --- a/vnt/src/channel/mod.rs +++ b/vnt/src/channel/mod.rs @@ -1,4 +1,4 @@ -use std::io; +use anyhow::Context; use std::net::{SocketAddr, UdpSocket}; use std::str::FromStr; @@ -7,7 +7,7 @@ use crate::channel::handler::RecvChannelHandler; use crate::channel::sender::AcceptSocketSender; use crate::channel::tcp_channel::tcp_listen; use crate::channel::udp_channel::udp_listen; -use crate::util::{io_convert, StopManager}; +use crate::util::StopManager; pub mod context; pub mod handler; @@ -145,7 +145,7 @@ pub fn init_context( is_tcp: bool, packet_loss_rate: Option, packet_delay: u32, -) -> io::Result<(ChannelContext, mio::net::TcpListener)> { +) -> anyhow::Result<(ChannelContext, mio::net::TcpListener)> { assert!(!ports.is_empty(), "not channel"); let mut udps = Vec::with_capacity(ports.len()); //检查系统是否支持ipv6 @@ -161,9 +161,9 @@ pub fn init_context( let (socket, address) = if use_ipv6 { let address: SocketAddr = format!("[::]:{}", port).parse().unwrap(); let socket = socket2::Socket::new(socket2::Domain::IPV6, socket2::Type::DGRAM, None)?; - io_convert(socket.set_only_v6(false), |_| { - format!("set_only_v6 failed: {}", &address) - })?; + socket + .set_only_v6(false) + .with_context(|| format!("set_only_v6 failed: {}", &address))?; (socket, address) } else { let address: SocketAddr = format!("0.0.0.0:{}", port).parse().unwrap(); @@ -172,16 +172,15 @@ pub fn init_context( address, ) }; - - io_convert(socket.set_send_buffer_size(2 * 1024 * 1024), |_| { - format!("set_send_buffer_size failed: {}", &address) - })?; - io_convert(socket.set_recv_buffer_size(2 * 1024 * 1024), |_| { - format!("set_recv_buffer_size failed: {}", &address) - })?; - io_convert(socket.bind(&address.into()), |_| { - format!("bind failed: {}", &address) - })?; + if let Err(e) = socket.set_send_buffer_size(2 * 1024 * 1024) { + log::warn!("set_send_buffer_size {:?}", e); + } + if let Err(e) = socket.set_recv_buffer_size(2 * 1024 * 1024) { + log::warn!("set_send_buffer_size {:?}", e); + } + socket + .bind(&address.into()) + .with_context(|| format!("bind failed: {}", &address))?; let main_channel: UdpSocket = socket.into(); udps.push(main_channel); } @@ -200,9 +199,9 @@ pub fn init_context( let (socket, address) = if use_ipv6 { let address: SocketAddr = format!("[::]:{}", port).parse().unwrap(); let socket = socket2::Socket::new(socket2::Domain::IPV6, socket2::Type::STREAM, None)?; - io_convert(socket.set_only_v6(false), |_| { - format!("set_only_v6 failed: {}", &address) - })?; + socket + .set_only_v6(false) + .with_context(|| format!("set_only_v6 failed: {}", &address))?; (socket, address) } else { let address: SocketAddr = format!("0.0.0.0:{}", port).parse().unwrap(); @@ -219,12 +218,12 @@ pub fn init_context( } else { format!("0.0.0.0:{}", port).parse().unwrap() }; - io_convert(socket.bind(&address.into()), |_| { - format!("bind failed: {}", &address) - })?; + socket + .bind(&address.into()) + .with_context(|| format!("bind failed: {}", &address))?; } else { //手动指定的ip,直接报错 - io_convert(Err(e), |_| format!("bind failed: {}", &address))?; + Err(anyhow::anyhow!("{:?},bind failed: {}", e, address))?; } } socket.listen(128)?; @@ -239,7 +238,7 @@ pub fn init_channel( context: ChannelContext, stop_manager: StopManager, recv_handler: H, -) -> io::Result<( +) -> anyhow::Result<( AcceptSocketSender>>, AcceptSocketSender<(mio::net::TcpStream, SocketAddr, Option>)>, )> diff --git a/vnt/src/core/conn.rs b/vnt/src/core/conn.rs index ef666ed..9bd965c 100644 --- a/vnt/src/core/conn.rs +++ b/vnt/src/core/conn.rs @@ -1,5 +1,4 @@ use std::collections::HashMap; -use std::io; use std::net::Ipv4Addr; use std::sync::Arc; use std::time::Duration; @@ -48,7 +47,7 @@ pub struct Vnt { } impl Vnt { - pub fn new(config: Config, callback: Call) -> io::Result { + pub fn new(config: Config, callback: Call) -> anyhow::Result { log::info!("config:{:?}", config); //服务端非对称加密 #[cfg(feature = "server_encrypt")] diff --git a/vnt/src/util/mod.rs b/vnt/src/util/mod.rs index c0f668a..9fae45b 100644 --- a/vnt/src/util/mod.rs +++ b/vnt/src/util/mod.rs @@ -1,6 +1,4 @@ mod notify; -mod result_convert; -pub use result_convert::io_convert; mod scheduler; pub use notify::StopManager; pub use scheduler::Scheduler; diff --git a/vnt/src/util/result_convert.rs b/vnt/src/util/result_convert.rs deleted file mode 100644 index 981d8c2..0000000 --- a/vnt/src/util/result_convert.rs +++ /dev/null @@ -1,10 +0,0 @@ -use std::fmt::Display; -use std::io; - -#[inline] -pub fn io_convert R>( - rs: io::Result, - f: F, -) -> io::Result { - rs.map_err(|e| io::Error::new(e.kind(), format!("{},internal error:{:?}", f(&e), e))) -}