Net-QUIC
view release on metacpan or search on metacpan
t/11-stateless-reset.t view on Meta::CPAN
use strict;
use warnings;
use FindBin ();
use Socket qw(inet_aton pack_sockaddr_in);
use Test2::V0;
use Time::HiRes qw(sleep);
use Net::QUIC::Endpoint;
my $server_local = pack_sockaddr_in(4441, inet_aton('127.0.0.1'));
my $client_local = pack_sockaddr_in(40010, inet_aton('127.0.0.1'));
my $alpn = 'net-quic-stateless-reset-test';
my $cert_file = "$FindBin::Bin/data/server-cert.pem";
my $key_file = "$FindBin::Bin/data/server-key.pem";
sub make_server {
return Net::QUIC::Endpoint->server(
alpn => $alpn,
certificate_file => $cert_file,
private_key_file => $key_file,
);
}
sub make_client {
return Net::QUIC::Endpoint->client(
local => $client_local,
peer => $server_local,
alpn => $alpn,
server_name => 'localhost',
ca_file => $cert_file,
);
}
sub pump_pair {
my ($server, $client) = @_;
my $progress = 0;
while (my $datagram = $server->next_datagram) {
++$progress;
$client->receive_datagram(
$datagram->data,
$client_local,
$server_local,
);
}
while (my $datagram = $client->next_datagram) {
++$progress;
$server->receive_datagram(
$datagram->data,
$server_local,
$client_local,
);
}
my $server_after = $server->timeout_after;
if (defined($server_after) && $server_after <= 0) {
++$progress;
$server->handle_timeout;
}
my $client_after = $client->timeout_after;
if (defined($client_after) && $client_after <= 0) {
++$progress;
$client->handle_timeout;
}
if (!$progress) {
my @wait = sort { $a <=> $b }
grep { defined($_) && $_ > 0 }
($server_after, $client_after);
if (@wait) {
my $nap = $wait[0] > 0.01 ? 0.01 : $wait[0] + 0.001;
sleep($nap);
++$progress;
}
}
return $progress;
( run in 1.050 second using v1.01-cache-2.11-cpan-036bef1c656 )