@@ -77,8 +77,9 @@ impl AsyncTcpStream {
7777 stream. set_nodelay ( true ) ?;
7878
7979 let socket = socket2:: Socket :: from ( stream. into_std ( ) ?) ;
80- socket. set_keepalive ( Some ( KEEPALIVE_TIME ) ) ?;
81- let std_stream = socket. into_tcp_stream ( ) ;
80+ let conf = socket2:: TcpKeepalive :: new ( ) . with_time ( KEEPALIVE_TIME ) ;
81+ socket. set_tcp_keepalive ( & conf) ?;
82+ let std_stream = std:: net:: TcpStream :: from ( socket) ;
8283 let stream = TcpStream :: from_std ( std_stream) ?;
8384
8485 Ok ( stream. into ( ) )
@@ -89,12 +90,10 @@ impl AsyncTcpStream {
8990 use async_std:: net:: TcpStream ;
9091 use socket2:: { Domain , Protocol , SockAddr , Socket , Type } ;
9192
92- let domain = match address {
93- SocketAddr :: V4 ( _) => Domain :: ipv4 ( ) ,
94- SocketAddr :: V6 ( _) => Domain :: ipv6 ( ) ,
95- } ;
96- let socket = Socket :: new ( domain, Type :: stream ( ) , Some ( Protocol :: tcp ( ) ) ) ?;
97- socket. set_keepalive ( Some ( KEEPALIVE_TIME ) ) ?;
93+ let domain = Domain :: for_address ( * address) ;
94+ let socket = Socket :: new ( domain, Type :: STREAM , Some ( Protocol :: TCP ) ) ?;
95+ let conf = socket2:: TcpKeepalive :: new ( ) . with_time ( KEEPALIVE_TIME ) ;
96+ socket. set_tcp_keepalive ( & conf) ?;
9897
9998 let address: SockAddr = address. clone ( ) . into ( ) ;
10099 if connect_timeout == Duration :: from_secs ( 0 ) {
@@ -103,7 +102,7 @@ impl AsyncTcpStream {
103102 socket. connect_timeout ( & address, connect_timeout) ?;
104103 }
105104
106- let stream: TcpStream = socket . into_tcp_stream ( ) . into ( ) ;
105+ let stream: TcpStream = std :: net :: TcpStream :: from ( socket ) . into ( ) ;
107106 stream. set_nodelay ( true ) ?;
108107
109108 Ok ( stream. into ( ) )
0 commit comments