OK, here's an example that seems to work. Not very pretty, I know :)
Accuracy of this test will increase with larger data sizes, since then you're reducing the percentage overhead introduced by server load, general cgi speed etc.
Seems to work with my quick testing, but YMMV.
(Oh and I had to retype this a couple of times, since the textbox likes to clear whenever I hit 'ESC'. Damn those 'vi' fingers)
#!/bin/perl
use warnings;
use strict;
use Time::HiRes qw ( gettimeofday ) ;
my $data = "E"x1020; #start with using 1k blocks shall we?
my %cgi_vars;
foreach my $pair ( split ( "&", $ENV{'QUERY_STRING'} ) )
{
my ( $var, $val ) = split ("=", $pair);
$cgi_vars{$var} = $val;
}
#cgi headers:
print "content-type: text/html\n\n";
#take time
my ( $start_seconds, $start_microseconds ) = gettimeofday;
print "$start_seconds $start_microseconds<BR/>\n";
#print stuff to thingy
if ( $cgi_vars{"data_size"} )
{
for ( my $count=0; $count < $cgi_vars{"data_size"}; $count++ )
{
print "<!",$data,"->\n";
}
}
#take time.
my ( $end_seconds, $end_microseconds ) = gettimeofday;
print "$end_seconds $end_microseconds<BR/>\n";
#compare.
my $time_delta = ($end_seconds - $start_seconds) + ( ( $end_microsecon
+ds - $start_microseconds) / 1000000);
if ( $cgi_vars{"data_size"} )
{
print "your data transfer of ", $cgi_vars{"data_size"}, "k took ", $
+time_delta, " seconds<BR/>\n";
print "your bandwidth is ",$cgi_vars{"data_size"} / $time_delta ," k
+ilobytes/sec<BR/>\n";
}
else
{
print "please invoke as $ENV{'SCRIPT_NAME'}?data_size=100<BR/> \n";
}