#!/usr/bin/perl -w use strict; use Benchmark qw(countit :hireswallclock); use IO::Socket::UNIX; @ARGV == 1 or die "Usage: $0 \n"; my ($filename) = @ARGV; $|++; sub measure { my ($name, $time, $code) = @_; printf '%30s: ', $name; my $benchmark = countit($time, $code); my $count = $benchmark->iters; my $real = $benchmark->real; printf "%8.3fms (%.2f/s)\n", 1000 * $real / $count, $count / $real; } measure 'Setup/teardown', 3, sub { my $sock = new IO::Socket::UNIX( Type => SOCK_STREAM, Peer => $filename, ) or die "Could not create socket: $!\n"; $sock->close; }; my $sock = new IO::Socket::UNIX( Type => SOCK_STREAM, Peer => $filename, ) or die "Could not create socket: $!\n"; foreach my $n (1, 10, 100, 1000, 10000) { my $line = ('x' x $n) . "\n"; measure "Latency ($n-byte lines)", 3, sub { $sock->print($line); scalar <$sock>; }; }