-
Notifications
You must be signed in to change notification settings - Fork 22
/
eg-40-proxy.pl
35 lines (27 loc) · 1.03 KB
/
eg-40-proxy.pl
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
# vim: ts=2 sw=2 noexpandtab
use lib qw(../lib);
use Moose;
use Socket qw(AF_UNIX SOCK_STREAM PF_UNSPEC);
use Proxy;
use Reflex::Stream;
# Socket pair 1. Writes to either end are readable at the other.
my ($socket_1a, $socket_1b);
socketpair($socket_1a, $socket_1b, AF_UNIX, SOCK_STREAM, PF_UNSPEC) or die $!;
# Socket pair 2. Writes to either end are readable at the other.
my ($socket_2a, $socket_2b);
socketpair($socket_2a, $socket_2b, AF_UNIX, SOCK_STREAM, PF_UNSPEC) or die $!;
# Proxy. Data appearing at either end is written to the other.
my $p = Proxy->new(
client => $socket_1b,
server => $socket_2b,
);
my $s1 = Reflex::Stream->new( handle => $socket_1a );
my $s2 = Reflex::Stream->new( handle => $socket_2a );
# Write data to Socket 1a.
# It will appear on Socket 1b, via the socketpair.
# Proxy will write it to Socket 2b.
# The data will emerge on Socket 2a, via the other socketpair.
$s1->put("test request\n");
# Wait for it to arrive on Stream 2 (socket 2a).
my $e = $s2->next();
warn "Got: ", $e->{name}, ": ", $e->{arg}{data};