print $socket ...
readline $socket;
####
writable {
syswrite ...
readable {
sysread ...
}}
####
on_write => sub { ... },
on_read => sub { ... },
####
sub http2 {
my $req = shift;
lambda {
my $uri = $req-> uri-> as_string;
my $host = $req-> uri-> host;
my $port = $req-> uri-> port;
my $addr = sockaddr_in( $port, inet_aton( $host));
context http( $addr, $uri);
tail {
my $res = shift;
return ( $res =~ /^(\w+ error:)/) ?
$res :
HTTP::Response-> parse( $res)
}}
}
####
sub http3 {
my $req = shift;
lambda {
context http2($req);
tail {
my $res = shift;
return $res unless ref($res);
return $res if $res-> code !~ /^3/;
$req-> uri( $res-> header('Location'));
context http2( $req);
again;
}}
}