Skip to content

Commit b874bfa

Browse files
committed
lol
1 parent bf33049 commit b874bfa

1 file changed

Lines changed: 24 additions & 0 deletions

File tree

crates/test-programs/src/bin/p2_udp_connect.rs

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -154,12 +154,36 @@ fn test_udp_connect_and_send(net: &Network, family: IpAddressFamily) {
154154
));
155155
}
156156

157+
fn test_udp_reconnect_after_pending_receive(net: &Network, family: IpAddressFamily) {
158+
let unspecified_addr = IpSocketAddress::new(IpAddress::new_unspecified(family), 0);
159+
let remote = IpSocketAddress::new(IpAddress::new_loopback(family), 4321);
160+
161+
let client = UdpSocket::new(family).unwrap();
162+
client.blocking_bind(&net, unspecified_addr).unwrap();
163+
164+
// Connect/reconnect in a loop, and this should always succeed...
165+
for _ in 0..100 {
166+
{
167+
let (rx, _tx) = client.stream(None).unwrap();
168+
assert!(rx.receive(1).unwrap().is_empty());
169+
}
170+
{
171+
let (rx, _tx) = client.stream(Some(remote)).unwrap();
172+
assert_eq!(client.remote_address(), Ok(remote));
173+
assert!(rx.receive(1).unwrap().is_empty());
174+
}
175+
}
176+
}
177+
157178
fn main() {
158179
let net = Network::default();
159180

160181
test_udp_connect_disconnect_reconnect(&net, IpAddressFamily::Ipv4);
161182
test_udp_connect_disconnect_reconnect(&net, IpAddressFamily::Ipv6);
162183

184+
test_udp_reconnect_after_pending_receive(&net, IpAddressFamily::Ipv4);
185+
test_udp_reconnect_after_pending_receive(&net, IpAddressFamily::Ipv6);
186+
163187
test_udp_disconnect_local_address(&net, IpAddressFamily::Ipv4);
164188
test_udp_disconnect_local_address(&net, IpAddressFamily::Ipv6);
165189

0 commit comments

Comments
 (0)