massa_bootstrap/
tools.rs

1use std::net::IpAddr;
2
3// to_canonical implementation (https://doc.rust-lang.org/src/core/net/ip_addr.rs.html#1733)
4pub(crate) fn to_canonical(ip: IpAddr) -> IpAddr {
5    match &ip {
6        &v4 @ IpAddr::V4(_) => v4,
7        IpAddr::V6(v6) => {
8            if let Some(mapped) = v6.to_ipv4_mapped() {
9                return IpAddr::V4(mapped);
10            }
11            IpAddr::V6(*v6)
12        }
13    }
14}
15
16/// Convert a mio stream to std
17/// Adapted from Tokio
18pub(crate) fn mio_stream_to_std(mio_socket: mio::net::TcpStream) -> std::net::TcpStream {
19    #[cfg(unix)]
20    {
21        use std::os::unix::io::{FromRawFd, IntoRawFd};
22        unsafe { std::net::TcpStream::from_raw_fd(mio_socket.into_raw_fd()) }
23    }
24
25    #[cfg(windows)]
26    {
27        use std::os::windows::io::{FromRawSocket, IntoRawSocket};
28        unsafe { std::net::TcpStream::from_raw_socket(mio_socket.into_raw_socket()) }
29    }
30
31    #[cfg(target_os = "wasi")]
32    {
33        use std::os::wasi::io::{FromRawFd, IntoRawFd};
34        unsafe { std::net::TcpStream::from_raw_fd(io.into_raw_fd()) }
35    }
36}