1132943Sgshapiro#!/usr/bin/perl -w 2132943Sgshapiro# 3132943Sgshapiro# Contributed by Bastiaan Bakker for SOCKETMAP 4266711Sgshapiro# $Id: socketmapClient.pl,v 1.1 2003-05-21 15:36:33 ca Exp $ 5132943Sgshapiro 6132943Sgshapirouse strict; 7132943Sgshapirouse IO::Socket; 8132943Sgshapiro 9132943Sgshapirodie "usage: $0 <connection> <mapname> <key> [<key2> ...]" if (@ARGV < 3); 10132943Sgshapiro 11132943Sgshapiromy $connection = shift @ARGV; 12132943Sgshapiromy $mapname = shift @ARGV; 13132943Sgshapiro 14132943Sgshapiromy $sock; 15132943Sgshapiro 16132943Sgshapiroif ($connection =~ /tcp:(.+):([0-9]*)/) { 17132943Sgshapiro $sock = new IO::Socket::INET ( 18132943Sgshapiro PeerAddr => $1, 19132943Sgshapiro PeerPort => $2, 20132943Sgshapiro Proto => 'tcp', 21132943Sgshapiro ); 22132943Sgshapiro} elsif ($connection =~ /((unix)|(local)):(.+)/) { 23132943Sgshapiro $sock = new IO::Socket::UNIX ( 24132943Sgshapiro Type => SOCK_STREAM, 25132943Sgshapiro Peer => $4 26132943Sgshapiro ); 27132943Sgshapiro} else { 28132943Sgshapiro die "unrecognized connection specification $connection"; 29132943Sgshapiro} 30132943Sgshapiro 31132943Sgshapirodie "Could not create socket: $!\n" unless $sock; 32132943Sgshapiro 33132943Sgshapirowhile(my $key = shift @ARGV) { 34132943Sgshapiro my $request = "$mapname $key"; 35132943Sgshapiro netstringWrite($sock, $request); 36132943Sgshapiro $sock->flush(); 37132943Sgshapiro my $response = netstringRead($sock); 38132943Sgshapiro 39132943Sgshapiro print "$key => $response\n"; 40132943Sgshapiro} 41132943Sgshapiro 42132943Sgshapiro$sock->close(); 43132943Sgshapiro 44132943Sgshapirosub netstringWrite { 45132943Sgshapiro my $sock = shift; 46132943Sgshapiro my $data = shift; 47132943Sgshapiro 48132943Sgshapiro print $sock length($data).':'.$data.','; 49132943Sgshapiro} 50132943Sgshapiro 51132943Sgshapirosub netstringRead { 52132943Sgshapiro my $sock = shift; 53132943Sgshapiro my $saveSeparator = $/; 54132943Sgshapiro $/ = ':'; 55132943Sgshapiro my $dataLength = <$sock>; 56132943Sgshapiro die "cannot read netstring length" unless defined($dataLength); 57132943Sgshapiro chomp $dataLength; 58132943Sgshapiro my $data; 59132943Sgshapiro if ($sock->read($data, $dataLength) == $dataLength) { 60132943Sgshapiro ($sock->getc() eq ',') or die "data misses closing ,"; 61132943Sgshapiro } else { 62132943Sgshapiro die "received only ".length($data)." of $dataLength bytes"; 63132943Sgshapiro } 64132943Sgshapiro 65132943Sgshapiro $/ = $saveSeparator; 66132943Sgshapiro return $data; 67132943Sgshapiro} 68