使用anyhow替换部分处理
This commit is contained in:
+23
-24
@@ -1,4 +1,4 @@
|
|||||||
use std::io;
|
use anyhow::Context;
|
||||||
use std::net::{SocketAddr, UdpSocket};
|
use std::net::{SocketAddr, UdpSocket};
|
||||||
use std::str::FromStr;
|
use std::str::FromStr;
|
||||||
|
|
||||||
@@ -7,7 +7,7 @@ use crate::channel::handler::RecvChannelHandler;
|
|||||||
use crate::channel::sender::AcceptSocketSender;
|
use crate::channel::sender::AcceptSocketSender;
|
||||||
use crate::channel::tcp_channel::tcp_listen;
|
use crate::channel::tcp_channel::tcp_listen;
|
||||||
use crate::channel::udp_channel::udp_listen;
|
use crate::channel::udp_channel::udp_listen;
|
||||||
use crate::util::{io_convert, StopManager};
|
use crate::util::StopManager;
|
||||||
|
|
||||||
pub mod context;
|
pub mod context;
|
||||||
pub mod handler;
|
pub mod handler;
|
||||||
@@ -145,7 +145,7 @@ pub fn init_context(
|
|||||||
is_tcp: bool,
|
is_tcp: bool,
|
||||||
packet_loss_rate: Option<f64>,
|
packet_loss_rate: Option<f64>,
|
||||||
packet_delay: u32,
|
packet_delay: u32,
|
||||||
) -> io::Result<(ChannelContext, mio::net::TcpListener)> {
|
) -> anyhow::Result<(ChannelContext, mio::net::TcpListener)> {
|
||||||
assert!(!ports.is_empty(), "not channel");
|
assert!(!ports.is_empty(), "not channel");
|
||||||
let mut udps = Vec::with_capacity(ports.len());
|
let mut udps = Vec::with_capacity(ports.len());
|
||||||
//检查系统是否支持ipv6
|
//检查系统是否支持ipv6
|
||||||
@@ -161,9 +161,9 @@ pub fn init_context(
|
|||||||
let (socket, address) = if use_ipv6 {
|
let (socket, address) = if use_ipv6 {
|
||||||
let address: SocketAddr = format!("[::]:{}", port).parse().unwrap();
|
let address: SocketAddr = format!("[::]:{}", port).parse().unwrap();
|
||||||
let socket = socket2::Socket::new(socket2::Domain::IPV6, socket2::Type::DGRAM, None)?;
|
let socket = socket2::Socket::new(socket2::Domain::IPV6, socket2::Type::DGRAM, None)?;
|
||||||
io_convert(socket.set_only_v6(false), |_| {
|
socket
|
||||||
format!("set_only_v6 failed: {}", &address)
|
.set_only_v6(false)
|
||||||
})?;
|
.with_context(|| format!("set_only_v6 failed: {}", &address))?;
|
||||||
(socket, address)
|
(socket, address)
|
||||||
} else {
|
} else {
|
||||||
let address: SocketAddr = format!("0.0.0.0:{}", port).parse().unwrap();
|
let address: SocketAddr = format!("0.0.0.0:{}", port).parse().unwrap();
|
||||||
@@ -172,16 +172,15 @@ pub fn init_context(
|
|||||||
address,
|
address,
|
||||||
)
|
)
|
||||||
};
|
};
|
||||||
|
if let Err(e) = socket.set_send_buffer_size(2 * 1024 * 1024) {
|
||||||
io_convert(socket.set_send_buffer_size(2 * 1024 * 1024), |_| {
|
log::warn!("set_send_buffer_size {:?}", e);
|
||||||
format!("set_send_buffer_size failed: {}", &address)
|
}
|
||||||
})?;
|
if let Err(e) = socket.set_recv_buffer_size(2 * 1024 * 1024) {
|
||||||
io_convert(socket.set_recv_buffer_size(2 * 1024 * 1024), |_| {
|
log::warn!("set_send_buffer_size {:?}", e);
|
||||||
format!("set_recv_buffer_size failed: {}", &address)
|
}
|
||||||
})?;
|
socket
|
||||||
io_convert(socket.bind(&address.into()), |_| {
|
.bind(&address.into())
|
||||||
format!("bind failed: {}", &address)
|
.with_context(|| format!("bind failed: {}", &address))?;
|
||||||
})?;
|
|
||||||
let main_channel: UdpSocket = socket.into();
|
let main_channel: UdpSocket = socket.into();
|
||||||
udps.push(main_channel);
|
udps.push(main_channel);
|
||||||
}
|
}
|
||||||
@@ -200,9 +199,9 @@ pub fn init_context(
|
|||||||
let (socket, address) = if use_ipv6 {
|
let (socket, address) = if use_ipv6 {
|
||||||
let address: SocketAddr = format!("[::]:{}", port).parse().unwrap();
|
let address: SocketAddr = format!("[::]:{}", port).parse().unwrap();
|
||||||
let socket = socket2::Socket::new(socket2::Domain::IPV6, socket2::Type::STREAM, None)?;
|
let socket = socket2::Socket::new(socket2::Domain::IPV6, socket2::Type::STREAM, None)?;
|
||||||
io_convert(socket.set_only_v6(false), |_| {
|
socket
|
||||||
format!("set_only_v6 failed: {}", &address)
|
.set_only_v6(false)
|
||||||
})?;
|
.with_context(|| format!("set_only_v6 failed: {}", &address))?;
|
||||||
(socket, address)
|
(socket, address)
|
||||||
} else {
|
} else {
|
||||||
let address: SocketAddr = format!("0.0.0.0:{}", port).parse().unwrap();
|
let address: SocketAddr = format!("0.0.0.0:{}", port).parse().unwrap();
|
||||||
@@ -219,12 +218,12 @@ pub fn init_context(
|
|||||||
} else {
|
} else {
|
||||||
format!("0.0.0.0:{}", port).parse().unwrap()
|
format!("0.0.0.0:{}", port).parse().unwrap()
|
||||||
};
|
};
|
||||||
io_convert(socket.bind(&address.into()), |_| {
|
socket
|
||||||
format!("bind failed: {}", &address)
|
.bind(&address.into())
|
||||||
})?;
|
.with_context(|| format!("bind failed: {}", &address))?;
|
||||||
} else {
|
} else {
|
||||||
//手动指定的ip,直接报错
|
//手动指定的ip,直接报错
|
||||||
io_convert(Err(e), |_| format!("bind failed: {}", &address))?;
|
Err(anyhow::anyhow!("{:?},bind failed: {}", e, address))?;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
socket.listen(128)?;
|
socket.listen(128)?;
|
||||||
@@ -239,7 +238,7 @@ pub fn init_channel<H>(
|
|||||||
context: ChannelContext,
|
context: ChannelContext,
|
||||||
stop_manager: StopManager,
|
stop_manager: StopManager,
|
||||||
recv_handler: H,
|
recv_handler: H,
|
||||||
) -> io::Result<(
|
) -> anyhow::Result<(
|
||||||
AcceptSocketSender<Option<Vec<mio::net::UdpSocket>>>,
|
AcceptSocketSender<Option<Vec<mio::net::UdpSocket>>>,
|
||||||
AcceptSocketSender<(mio::net::TcpStream, SocketAddr, Option<Vec<u8>>)>,
|
AcceptSocketSender<(mio::net::TcpStream, SocketAddr, Option<Vec<u8>>)>,
|
||||||
)>
|
)>
|
||||||
|
|||||||
@@ -1,5 +1,4 @@
|
|||||||
use std::collections::HashMap;
|
use std::collections::HashMap;
|
||||||
use std::io;
|
|
||||||
use std::net::Ipv4Addr;
|
use std::net::Ipv4Addr;
|
||||||
use std::sync::Arc;
|
use std::sync::Arc;
|
||||||
use std::time::Duration;
|
use std::time::Duration;
|
||||||
@@ -48,7 +47,7 @@ pub struct Vnt {
|
|||||||
}
|
}
|
||||||
|
|
||||||
impl Vnt {
|
impl Vnt {
|
||||||
pub fn new<Call: VntCallback>(config: Config, callback: Call) -> io::Result<Self> {
|
pub fn new<Call: VntCallback>(config: Config, callback: Call) -> anyhow::Result<Self> {
|
||||||
log::info!("config:{:?}", config);
|
log::info!("config:{:?}", config);
|
||||||
//服务端非对称加密
|
//服务端非对称加密
|
||||||
#[cfg(feature = "server_encrypt")]
|
#[cfg(feature = "server_encrypt")]
|
||||||
|
|||||||
@@ -1,6 +1,4 @@
|
|||||||
mod notify;
|
mod notify;
|
||||||
mod result_convert;
|
|
||||||
pub use result_convert::io_convert;
|
|
||||||
mod scheduler;
|
mod scheduler;
|
||||||
pub use notify::StopManager;
|
pub use notify::StopManager;
|
||||||
pub use scheduler::Scheduler;
|
pub use scheduler::Scheduler;
|
||||||
|
|||||||
@@ -1,10 +0,0 @@
|
|||||||
use std::fmt::Display;
|
|
||||||
use std::io;
|
|
||||||
|
|
||||||
#[inline]
|
|
||||||
pub fn io_convert<T, R: Display, F: FnOnce(&io::Error) -> R>(
|
|
||||||
rs: io::Result<T>,
|
|
||||||
f: F,
|
|
||||||
) -> io::Result<T> {
|
|
||||||
rs.map_err(|e| io::Error::new(e.kind(), format!("{},internal error:{:?}", f(&e), e)))
|
|
||||||
}
|
|
||||||
Reference in New Issue
Block a user