@@ -9,6 +9,7 @@ use crate::{
9
9
endpoint,
10
10
environment:: tokio:: { self as env, Environment } ,
11
11
socket:: Protocol ,
12
+ TransportFeatures ,
12
13
} ,
13
14
} ;
14
15
use std:: { io, net:: SocketAddr } ;
@@ -29,12 +30,15 @@ where
29
30
// ensure we have a secret for the peer
30
31
let peer = handshake. await ?;
31
32
33
+ let ( crypto, parameters) = peer. pair ( & TransportFeatures :: UDP ) ;
34
+
32
35
let stream = endpoint:: open_stream (
33
36
env,
34
- peer,
37
+ peer. map ( ) ,
38
+ crypto,
39
+ parameters,
35
40
env:: UdpUnbound ( acceptor_addr. into ( ) ) ,
36
41
subscriber,
37
- None ,
38
42
) ?;
39
43
40
44
// build the stream inside the application context
60
64
Sub : event:: Subscriber ,
61
65
{
62
66
// 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) ) ?;
64
75
65
76
// Make sure TCP_NODELAY is set
66
77
let _ = socket. set_nodelay ( true ) ;
@@ -77,14 +88,15 @@ where
77
88
78
89
let stream = endpoint:: open_stream (
79
90
env,
80
- peer,
91
+ peer. map ( ) ,
92
+ crypto,
93
+ parameters,
81
94
env:: TcpRegistered {
82
95
socket,
83
96
peer_addr,
84
97
local_port,
85
98
} ,
86
99
subscriber,
87
- None ,
88
100
) ?;
89
101
90
102
// build the stream inside the application context
@@ -114,16 +126,20 @@ where
114
126
{
115
127
let local_port = socket. local_addr ( ) ?. port ( ) ;
116
128
let peer_addr = socket. peer_addr ( ) ?. into ( ) ;
129
+
130
+ let ( crypto, parameters) = peer. pair ( & TransportFeatures :: TCP ) ;
131
+
117
132
let stream = endpoint:: open_stream (
118
133
env,
119
- peer,
134
+ peer. map ( ) ,
135
+ crypto,
136
+ parameters,
120
137
env:: TcpRegistered {
121
138
socket,
122
139
peer_addr,
123
140
local_port,
124
141
} ,
125
142
subscriber,
126
- None ,
127
143
) ?;
128
144
129
145
// build the stream inside the application context
0 commit comments