mirror of
https://github.com/EasyTier/EasyTier.git
synced 2026-09-08 00:00:32 +00:00
32 lines
795 B
Rust
32 lines
795 B
Rust
pub mod guard;
|
|
pub mod panic;
|
|
pub mod string;
|
|
pub mod task;
|
|
|
|
use std::net::{IpAddr, Ipv4Addr, SocketAddr, TcpListener};
|
|
use std::sync::{Arc, Weak};
|
|
|
|
pub type PeerRoutePair = crate::proto::api::instance::PeerRoutePair;
|
|
|
|
pub fn check_tcp_available(port: u16) -> bool {
|
|
let s = SocketAddr::new(IpAddr::V4(Ipv4Addr::UNSPECIFIED), port);
|
|
TcpListener::bind(s).is_ok()
|
|
}
|
|
|
|
pub fn find_free_tcp_port(mut range: std::ops::Range<u16>) -> Option<u16> {
|
|
range.find(|&port| check_tcp_available(port))
|
|
}
|
|
|
|
pub fn weak_upgrade<T>(weak: &Weak<T>) -> anyhow::Result<Arc<T>> {
|
|
weak.upgrade()
|
|
.ok_or_else(|| anyhow::anyhow!("{} not available", std::any::type_name::<T>()))
|
|
}
|
|
|
|
pub trait BoxExt: Sized {
|
|
fn boxed(self) -> Box<Self> {
|
|
Box::new(self)
|
|
}
|
|
}
|
|
|
|
impl<T> BoxExt for T {}
|