blob: 4b72b76c44fca17ec6ef62cfaac91fa5383a0cf0 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
|
#!/usr/bin/perl -w
#
# Contributed by Bastiaan Bakker for SOCKETMAP
# $Sendmail: 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;
}
|