#!/usr/bin/perl -w $| = 1; my $header; my $message; while(sysread(STDIN, $header, 8) == 8) { (my $magic, my $length) = unpack('N2', $header); if ($magic != 0xbeefdead || $length < 8) { die("Bad header: " . unpack('H*', $header) . "!\n"); } $length -= 8; if (sysread(STDIN, $message, $length) != $length) { die("read($length): $!\n"); } @message = unpack('(N3 N/a x![N])*', $message); for(my $n = 0; $n < $#message; $n += 4) { print STDERR $message[$n] . "\t" . $message[$n + 1] . "\t" . $message[$n + 2] . "\t" . unpack('H*', $message[$n + 3]) . "\n"; } # Respond print pack('N2', 0xdeadbeef, 8); } # vim:softtabstop=2:sw=2