File tree Expand file tree Collapse file tree 1 file changed +21
-1
lines changed Expand file tree Collapse file tree 1 file changed +21
-1
lines changed Original file line number Diff line number Diff line change @@ -246,6 +246,17 @@ pub trait PoolExt: private::Sealed {
246
246
addrs : A ,
247
247
) -> io:: Result < TcpStream > ;
248
248
249
+ /// Initiate a TCP connection on a socket.
250
+ ///
251
+ /// This is simlar to to [`connect_into_tcp_stream`], however instead
252
+ /// of converting a `TcpListener` to a `TcpStream`, it leaves fd in the
253
+ /// existing `TcpListener`.
254
+ fn connect_existing_tcp_listener < A : ToSocketAddrs > (
255
+ & self ,
256
+ socket : & TcpListener ,
257
+ addrs : A ,
258
+ ) -> io:: Result < ( ) > ;
259
+
249
260
/// Initiate a UDP connection.
250
261
///
251
262
/// This is simlar to to [`Pool::connect_udp_socket`] in that it performs a
@@ -310,14 +321,23 @@ impl PoolExt for Pool {
310
321
socket : TcpListener ,
311
322
addrs : A ,
312
323
) -> io:: Result < TcpStream > {
324
+ self . connect_existing_tcp_listener ( & socket, addrs) ?;
325
+ Ok ( TcpStream :: from ( OwnedFd :: from ( socket) ) )
326
+ }
327
+
328
+ fn connect_existing_tcp_listener < A : ToSocketAddrs > (
329
+ & self ,
330
+ socket : & TcpListener ,
331
+ addrs : A ,
332
+ ) -> io:: Result < ( ) > {
313
333
let addrs = addrs. to_socket_addrs ( ) ?;
314
334
315
335
let mut last_err = None ;
316
336
for addr in addrs {
317
337
self . _pool ( ) . check_addr ( & addr) ?;
318
338
319
339
match rustix:: net:: connect ( & socket, & addr) {
320
- Ok ( ( ) ) => return Ok ( TcpStream :: from ( OwnedFd :: from ( socket ) ) ) ,
340
+ Ok ( ( ) ) => return Ok ( ( ) ) ,
321
341
Err ( err) => last_err = Some ( err) ,
322
342
}
323
343
}
You can’t perform that action at this time.
0 commit comments