1use std::net::IpAddr;
2
3pub(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
16pub(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}