#!/usr/bin/perl -w use strict; use AnyEvent; use AnyEvent::Socket; use AnyEvent::Handle; use Storable; use File::HomeDir; # timeout in seconds my $timeout = 10; # socket my $socket = File::HomeDir->my_home . '/var/stats.sock'; my $cv = AnyEvent->condvar; sub my_die { print "UNKNOWN "; print @_; print "\n"; exit 3; } tcp_connect "unix/", $socket, sub { my ($fh) = @_ or my_die("Unable to connect to socket: $!");; my $data; my $h; $h = new AnyEvent::Handle fh => $fh, on_eof => sub { # read stats data my $stats = Storable::thaw($data); print "OK | ham=$stats->{ham};;;0 spam=$stats->{spam};;;0 block=$stats->{block};;;0\n"; $cv->send; }, on_read => sub { $h->push_read(line => sub { my ($h, $line) = @_; $data .= "$line\n"; }); }; }; # general timeout my $t; $t = AnyEvent->timer( after => $timeout, cb => sub { my_die("Timeout after $timeout seconds."); undef $t; }); $cv->recv;