# $Id: ae0.pl,v 1.2 2009-08-06 14:00:36 root Exp $
# An echo client-server benchmark.
use warnings;
use strict;
use Time::HiRes qw(time);
use AnyEvent;
use AnyEvent::Impl::Perl;
use AnyEvent::Socket;
use IO::Socket::INET;
my $CYCLES = 500;
my $port = 11212;
my $serv_sock = IO::Socket::INET-> new(
Listen => 5,
LocalPort => $port,
Proto => 'tcp',
ReuseAddr => 1,
);
my $serv_w = AE::io $serv_sock, 0, sub {
accept my $fh, $serv_sock
or return;
sysread $serv_sock, my $buf, 512;
syswrite $serv_sock, $buf;
};
my $t = time;
my $connections;
sub _make_connection {
if ($connections++ < $CYCLES) {
tcp_connect "127.0.0.1", $port, sub {
my ($fh) = @_
or die "tcp_connect: $!";
syswrite $fh, "can write $connections\n";
my $w; $w = AE::io $fh, 0, sub {
sysread $fh, my $buf, 512;
undef $fh;
undef $w;
&_make_connection;
};
};
} else {
$t = time - $t;
printf "%.3f sec\n", $t;
exit;
}
};
_make_connection;
AnyEvent->condvar->recv;