#!/usr/bin/perl

use strict;

use IO::Socket;
use Time::HiRes 'time';

die "Usage: $0 host[:port] (port defaults to 19)\n" unless defined $ARGV[0];
my $addr = $ARGV[0];
$addr .= ":19" unless $addr =~ /\:/;

my $socket = new IO::Socket::INET(PeerAddr => $addr, Proto => 'tcp')
	or die "Could not connect to $addr: $!";
print "Connected to $addr\n";

my $count = 0;
my $start = time;
my $input;
my $reads = 0;
while (defined ($input = <$socket>)) {
	$reads = ($reads + 1) % 100; #speed up: check only every 100 reads
	if ($reads == 0 and time - $start >= 1) {
		#1 sec
		my $duration = time - $start;
		my $speed_kbits = sprintf("%.2f", $count * 8 / 1_024 / $duration); #kbit/s
		my $speed_mbits = sprintf("%.2f", $count * 8 / 1_048_576  / $duration); #kbit/s
		print "Speed: $speed_kbits kbit/s - $speed_mbits mbit/s\n";
		$count = 0;
		$start = time;
	} else {
		$count += length $input;
	}
}
close($socket);

