4313cc8344
MFC after: 3 days
68 lines
1.5 KiB
Perl
Executable File
68 lines
1.5 KiB
Perl
Executable File
#!/usr/bin/perl -w
|
|
#
|
|
# Contributed by Bastiaan Bakker for SOCKETMAP
|
|
# $Id: socketmapClient.pl,v 1.1 2003-05-21 15:36:33 ca Exp $
|
|
|
|
use strict;
|
|
use IO::Socket;
|
|
|
|
die "usage: $0 <connection> <mapname> <key> [<key2> ...]" if (@ARGV < 3);
|
|
|
|
my $connection = shift @ARGV;
|
|
my $mapname = shift @ARGV;
|
|
|
|
my $sock;
|
|
|
|
if ($connection =~ /tcp:(.+):([0-9]*)/) {
|
|
$sock = new IO::Socket::INET (
|
|
PeerAddr => $1,
|
|
PeerPort => $2,
|
|
Proto => 'tcp',
|
|
);
|
|
} elsif ($connection =~ /((unix)|(local)):(.+)/) {
|
|
$sock = new IO::Socket::UNIX (
|
|
Type => SOCK_STREAM,
|
|
Peer => $4
|
|
);
|
|
} else {
|
|
die "unrecognized connection specification $connection";
|
|
}
|
|
|
|
die "Could not create socket: $!\n" unless $sock;
|
|
|
|
while(my $key = shift @ARGV) {
|
|
my $request = "$mapname $key";
|
|
netstringWrite($sock, $request);
|
|
$sock->flush();
|
|
my $response = netstringRead($sock);
|
|
|
|
print "$key => $response\n";
|
|
}
|
|
|
|
$sock->close();
|
|
|
|
sub netstringWrite {
|
|
my $sock = shift;
|
|
my $data = shift;
|
|
|
|
print $sock length($data).':'.$data.',';
|
|
}
|
|
|
|
sub netstringRead {
|
|
my $sock = shift;
|
|
my $saveSeparator = $/;
|
|
$/ = ':';
|
|
my $dataLength = <$sock>;
|
|
die "cannot read netstring length" unless defined($dataLength);
|
|
chomp $dataLength;
|
|
my $data;
|
|
if ($sock->read($data, $dataLength) == $dataLength) {
|
|
($sock->getc() eq ',') or die "data misses closing ,";
|
|
} else {
|
|
die "received only ".length($data)." of $dataLength bytes";
|
|
}
|
|
|
|
$/ = $saveSeparator;
|
|
return $data;
|
|
}
|