@@ -9,6 +9,7 @@ use crate::{
99 endpoint,
1010 environment:: tokio:: { self as env, Environment } ,
1111 socket:: Protocol ,
12+ TransportFeatures ,
1213 } ,
1314} ;
1415use std:: { io, net:: SocketAddr } ;
@@ -29,12 +30,15 @@ where
2930 // ensure we have a secret for the peer
3031 let peer = handshake. await ?;
3132
33+ let ( crypto, parameters) = peer. pair ( & TransportFeatures :: UDP ) ;
34+
3235 let stream = endpoint:: open_stream (
3336 env,
34- peer,
37+ peer. map ( ) ,
38+ crypto,
39+ parameters,
3540 env:: UdpUnbound ( acceptor_addr. into ( ) ) ,
3641 subscriber,
37- None ,
3842 ) ?;
3943
4044 // build the stream inside the application context
6064 Sub : event:: Subscriber ,
6165{
6266 // Race TCP handshake with the TLS handshake
63- let ( socket, peer) = tokio:: try_join!( TcpStream :: connect( acceptor_addr) , handshake, ) ?;
67+ let handshake = async {
68+ let peer = handshake. await ?;
69+ let ( crypto, parameters) = peer. pair ( & TransportFeatures :: TCP ) ;
70+ Ok ( ( peer, crypto, parameters) )
71+ } ;
72+ // poll the crypto first so the server can read the first packet on accept in the happy path
73+ let ( ( peer, crypto, parameters) , socket) =
74+ tokio:: try_join!( handshake, TcpStream :: connect( acceptor_addr) ) ?;
6475
6576 // Make sure TCP_NODELAY is set
6677 let _ = socket. set_nodelay ( true ) ;
@@ -77,14 +88,15 @@ where
7788
7889 let stream = endpoint:: open_stream (
7990 env,
80- peer,
91+ peer. map ( ) ,
92+ crypto,
93+ parameters,
8194 env:: TcpRegistered {
8295 socket,
8396 peer_addr,
8497 local_port,
8598 } ,
8699 subscriber,
87- None ,
88100 ) ?;
89101
90102 // build the stream inside the application context
@@ -114,16 +126,20 @@ where
114126{
115127 let local_port = socket. local_addr ( ) ?. port ( ) ;
116128 let peer_addr = socket. peer_addr ( ) ?. into ( ) ;
129+
130+ let ( crypto, parameters) = peer. pair ( & TransportFeatures :: TCP ) ;
131+
117132 let stream = endpoint:: open_stream (
118133 env,
119- peer,
134+ peer. map ( ) ,
135+ crypto,
136+ parameters,
120137 env:: TcpRegistered {
121138 socket,
122139 peer_addr,
123140 local_port,
124141 } ,
125142 subscriber,
126- None ,
127143 ) ?;
128144
129145 // build the stream inside the application context
0 commit comments