#!/usr/bin/perl -w
#
# tap.pl, a polyp.pl client, for testing purposes mostly
# version 1.0.0 by Pegasus Epsilon <pegasus@pimpninjas.org>
# written for jellyfish.pl, a minecraft to IRC bridge
#
# Distribute Unmodified - http://pegasus.pimpninjas.org/laboratory
use strict;
use POSIX;
use Socket;
unless ($ARGV[0]) {
print "Usage: $0 name\n";
exit;
}
open(*PID, "<", "$ARGV[0].pid") || do {
print "[tap] $ARGV[0] not running\n";
exit;
};
my $pid = <PID>;
close PID;
socket(TAPPED, PF_UNIX, SOCK_STREAM, 0) || die;
connect(TAPPED, sockaddr_un("polyp.$pid")) || do {
print "can't connect to $ARGV[0]\n";
exit;
};
select((
(select TAPPED), $| = 1,
(select STDOUT), $| = 1
)[0]);
vec(my $inputs = '', fileno TAPPED, 1) = 1;
vec($inputs, fileno STDIN, 1) = 1;
while (my $n = select(my $r = $inputs, undef, my $e = $inputs, undef)) {
if (-1 == $n && $!{EINTR}) { $! = undef; next; }
if (vec $e, fileno TAPPED, 1) { print "TAPPED closed\n"; exit; }
print <TAPPED> || die if (vec $r, fileno TAPPED, 1);
print TAPPED <STDIN> || die if (vec $r, fileno STDIN, 1);
}