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 {
246246 addrs : A ,
247247 ) -> io:: Result < TcpStream > ;
248248
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+
249260 /// Initiate a UDP connection.
250261 ///
251262 /// This is simlar to to [`Pool::connect_udp_socket`] in that it performs a
@@ -310,14 +321,23 @@ impl PoolExt for Pool {
310321 socket : TcpListener ,
311322 addrs : A ,
312323 ) -> 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 < ( ) > {
313333 let addrs = addrs. to_socket_addrs ( ) ?;
314334
315335 let mut last_err = None ;
316336 for addr in addrs {
317337 self . _pool ( ) . check_addr ( & addr) ?;
318338
319339 match rustix:: net:: connect ( & socket, & addr) {
320- Ok ( ( ) ) => return Ok ( TcpStream :: from ( OwnedFd :: from ( socket ) ) ) ,
340+ Ok ( ( ) ) => return Ok ( ( ) ) ,
321341 Err ( err) => last_err = Some ( err) ,
322342 }
323343 }
You can’t perform that action at this time.
0 commit comments