+#!/usr/bin/perl -w
+
+use strict;
+use POSIX;
+
+open R, '/dev/urandom' or die $!;
+
+system 'cat >/dev/null &';
+
+sub randbytes ($) {
+ my ($count) = @_;
+ my $s;
+ my $r = read R, $s, $count;
+ die $! unless $r==$count;
+ return $s;
+}
+
+sub randbyteval () {
+ my $b = randbytes 1;
+ my ($r) = unpack 'C', $b;
+ return $r;
+}
+
+sub randvalue ($$) {
+ my ($min,$maxplus1) = @_;
+ my $b = randbyteval;
+ return floor(($b/256.0) * ($maxplus1-$min)) + $min;
+}
+
+for (;;) {
+ my $lenbits = randvalue 0,14;
+ my $len= (randbyteval << 8) | randbyteval;
+ $len &= (1 << $lenbits)-1;
+ my $data = randbytes $len;
+ if (randbyteval >= 0x80) {
+ $data =~ s{[\xc0\xdb]}{
+ $& eq "\xc0" ? "\xcb\xdc" :
+ $& eq "\xdb" ? "\xcb\xdd" :
+ die
+ }ge;
+ }
+ print "\xc0";
+ print $data;
+ STDOUT->flush;
+}