fut_compat/net/
tokio.rs

1use super::*;
2use crate::io::TokioCompat;
3
4use ::tokio::net;
5
6
7
8#[cfg(unix)]
9#[cfg_attr(docsrs, doc(cfg(unix)))]
10impl UnixSocketAddr for net::unix::SocketAddr {
11    fn is_unnamed(&self) -> bool {
12        self.is_unnamed()
13    }
14
15    fn as_pathname(&self) -> Option<&Path> {
16        self.as_pathname()
17    }
18}
19
20
21
22#[async_trait]
23impl TcpStream for net::TcpStream {
24    async fn connect<A: ToSocketAddrs + Send>(addrs: A) -> std::io::Result<Self> {
25        let addrs: Vec<SocketAddr> = ToSocketAddrs::to_socket_addrs(addrs).await.collect();
26
27        Self::connect(&addrs[..]).await
28    }
29
30    async fn peek(&self, buf: &mut [u8]) -> std::io::Result<usize> {
31        self.peek(buf).await
32    }
33
34    fn peer_addr(&self) -> std::io::Result<SocketAddr> {
35        self.peer_addr()
36    }
37
38    fn local_addr(&self) -> std::io::Result<SocketAddr> {
39        self.local_addr()
40    }
41
42    fn nodelay(&self) -> std::io::Result<bool> {
43        self.nodelay()
44    }
45
46    fn set_nodelay(&self, nodelay: bool) -> std::io::Result<()> {
47        self.set_nodelay(nodelay)
48    }
49
50    fn ttl(&self) -> std::io::Result<u32> {
51        self.ttl()
52    }
53
54    fn set_ttl(&self, ttl: u32) -> std::io::Result<()> {
55        self.set_ttl(ttl)
56    }
57}
58
59#[async_trait]
60impl TcpStream for TokioCompat<net::TcpStream> {
61    async fn connect<A: ToSocketAddrs + Send>(addrs: A) -> std::io::Result<Self> {
62        let addrs: Vec<SocketAddr> = ToSocketAddrs::to_socket_addrs(addrs).await.collect();
63
64        let inner = net::TcpStream::connect(&addrs[..]).await?;
65
66        Ok(Self::new(inner))
67    }
68
69    async fn peek(&self, buf: &mut [u8]) -> std::io::Result<usize> {
70        self.get_ref().peek(buf).await
71    }
72
73    fn peer_addr(&self) -> std::io::Result<SocketAddr> {
74        self.get_ref().peer_addr()
75    }
76
77    fn local_addr(&self) -> std::io::Result<SocketAddr> {
78        self.get_ref().local_addr()
79    }
80
81    fn nodelay(&self) -> std::io::Result<bool> {
82        self.get_ref().nodelay()
83    }
84
85    fn set_nodelay(&self, nodelay: bool) -> std::io::Result<()> {
86        self.get_ref().set_nodelay(nodelay)
87    }
88
89    fn ttl(&self) -> std::io::Result<u32> {
90        self.get_ref().ttl()
91    }
92
93    fn set_ttl(&self, ttl: u32) -> std::io::Result<()> {
94        self.get_ref().set_ttl(ttl)
95    }
96}
97
98
99
100#[async_trait]
101impl TcpListener for net::TcpListener {
102    type TcpStream = net::TcpStream;
103
104    async fn bind<A: ToSocketAddrs + Send>(addrs: A) -> std::io::Result<Self> {
105        let addrs: Vec<SocketAddr> = ToSocketAddrs::to_socket_addrs(addrs).await.collect();
106
107        Self::bind(&addrs[..]).await
108    }
109
110    async fn accept(&self) -> std::io::Result<(Self::TcpStream, SocketAddr)> {
111        self.accept().await
112    }
113
114    fn local_addr(&self) -> std::io::Result<SocketAddr> {
115        self.local_addr()
116    }
117}
118
119
120
121#[cfg(unix)]
122#[cfg_attr(docsrs, doc(cfg(unix)))]
123#[async_trait]
124impl UnixStream for net::UnixStream {
125    type SocketAddr = net::unix::SocketAddr;
126
127    async fn connect<P: AsRef<Path> + Send>(path: P) -> std::io::Result<Self> {
128        Self::connect(path).await
129    }
130
131    fn pair() -> std::io::Result<(Self, Self)> {
132        Self::pair()
133    }
134
135    fn peer_addr(&self) -> std::io::Result<Self::SocketAddr> {
136        self.peer_addr()
137    }
138
139    fn local_addr(&self) -> std::io::Result<Self::SocketAddr> {
140        self.local_addr()
141    }
142}
143
144#[cfg(unix)]
145#[cfg_attr(docsrs, doc(cfg(unix)))]
146#[async_trait]
147impl UnixStream for TokioCompat<net::UnixStream> {
148    type SocketAddr = net::unix::SocketAddr;
149
150    async fn connect<P: AsRef<Path> + Send>(path: P) -> std::io::Result<Self> {
151        let inner = net::UnixStream::connect(path).await?;
152
153        Ok(Self::new(inner))
154    }
155
156    fn pair() -> std::io::Result<(Self, Self)> {
157        net::UnixStream::pair().map(|(inner1, inner2)| (Self::new(inner1), Self::new(inner2)))
158    }
159
160    fn peer_addr(&self) -> std::io::Result<Self::SocketAddr> {
161        self.get_ref().peer_addr()
162    }
163
164    fn local_addr(&self) -> std::io::Result<Self::SocketAddr> {
165        self.get_ref().local_addr()
166    }
167}
168
169
170
171#[cfg(unix)]
172#[cfg_attr(docsrs, doc(cfg(unix)))]
173#[async_trait]
174impl UnixListener for net::UnixListener {
175    type UnixStream = net::UnixStream;
176    type SocketAddr = net::unix::SocketAddr;
177
178    async fn bind<P: AsRef<Path> + Send>(path: P) -> std::io::Result<Self> {
179        Self::bind(path)
180    }
181
182    async fn accept(&self) -> std::io::Result<(Self::UnixStream, Self::SocketAddr)> {
183        self.accept().await
184    }
185
186    fn local_addr(&self) -> std::io::Result<Self::SocketAddr> {
187        self.local_addr()
188    }
189}