@@ -11,7 +11,6 @@ use std::time::Duration;
11
11
12
12
use futures_util:: future:: Either ;
13
13
use http:: uri:: { Scheme , Uri } ;
14
- use net2:: TcpBuilder ;
15
14
use pin_project:: pin_project;
16
15
use tokio:: net:: TcpStream ;
17
16
use tokio:: time:: Delay ;
@@ -552,30 +551,32 @@ fn connect(
552
551
reuse_address : bool ,
553
552
connect_timeout : Option < Duration > ,
554
553
) -> io:: Result < impl Future < Output = io:: Result < TcpStream > > > {
555
- let builder = match * addr {
556
- SocketAddr :: V4 ( _) => TcpBuilder :: new_v4 ( ) ?,
557
- SocketAddr :: V6 ( _) => TcpBuilder :: new_v6 ( ) ?,
554
+ use socket2:: { Domain , Protocol , Socket , Type } ;
555
+ let domain = match * addr {
556
+ SocketAddr :: V4 ( _) => Domain :: ipv4 ( ) ,
557
+ SocketAddr :: V6 ( _) => Domain :: ipv6 ( ) ,
558
558
} ;
559
+ let socket = Socket :: new ( domain, Type :: stream ( ) , Some ( Protocol :: tcp ( ) ) ) ?;
559
560
560
561
if reuse_address {
561
- builder . reuse_address ( reuse_address ) ?;
562
+ socket . set_reuse_address ( true ) ?;
562
563
}
563
564
564
565
if let Some ( ref local_addr) = * local_addr {
565
566
// Caller has requested this socket be bound before calling connect
566
- builder . bind ( SocketAddr :: new ( local_addr. clone ( ) , 0 ) ) ?;
567
+ socket . bind ( & SocketAddr :: new ( local_addr. clone ( ) , 0 ) . into ( ) ) ?;
567
568
} else if cfg ! ( windows) {
568
569
// Windows requires a socket be bound before calling connect
569
570
let any: SocketAddr = match * addr {
570
571
SocketAddr :: V4 ( _) => ( [ 0 , 0 , 0 , 0 ] , 0 ) . into ( ) ,
571
572
SocketAddr :: V6 ( _) => ( [ 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ] , 0 ) . into ( ) ,
572
573
} ;
573
- builder . bind ( any) ?;
574
+ socket . bind ( & any. into ( ) ) ?;
574
575
}
575
576
576
577
let addr = * addr;
577
578
578
- let std_tcp = builder . to_tcp_stream ( ) ? ;
579
+ let std_tcp = socket . into_tcp_stream ( ) ;
579
580
580
581
Ok ( async move {
581
582
let connect = TcpStream :: connect_std ( std_tcp, & addr) ;
0 commit comments