Jeff Abrahamson on Mon, 20 May 2002 23:30:31 +0200


[Date Prev] [Date Next] [Thread Prev] [Thread Next] [Date Index] [Thread Index]

[PLUG] perl and sockets


I'm writing a test harness for a program that talks tcp/ip. I just
want some perl code that can listen on a socket, grab the bundles that
come across, and write them to stdout (with appropriate translation)
so I can monitor what's happening. I'm hitting a stumbling block that
I think must be a minor misconception.

What I'm expecting has the form (in C-speak)

    {
     char,
     short,     /* this is N, below */
     struct {
       long,
       long,
       long
     }[N]       /* where N was read as the short after the char */
    }

So I write this thing that uses IO::Socket::INET and, after the new
call, says

    $client = $inet->accept();
    while(my $block = <$client>) {
        print_one($block);
    }

Ah, but there's the rub. That read <$client> is looking for an EOL
terminator, near as I can tell, but it probably won't get one, as what
it's reading is binary.

In C, I'd use read, which I could do in perl, too. But I expect perl
to be simpler for such a simple case. Am I missing something?


As an aside, is there a simple way to unpack that data struct that
comes across? I'm currently using a sequence of unpacks, the first to
get the char and the short (N), then others to read the array of
structs.


Thanks in advance for any tips. I'm a bit of a newbie for writing
tcp/ip code.

-- 
 Jeff

 Jeff Abrahamson  <http://www.purple.com/jeff/>

 The Big Book of Misunderstanding, now in bookstores and on the web:
 <http://www.misunderstanding.net/buystuff.html>

Attachment: pgpTtpVwxXOXz.pgp
Description: PGP signature