#!/usr/bin/perl -w
use strict;
use IO::Socket;

my $MSG_EOL = "\015\012";

my ($kidpid, $handle, $line);

die "syntax: $0 mux_socket" unless @ARGV == 1;

my $socket = shift;

$socket = "/tmp/imip_mux_$socket.sock" if $socket =~ /^\d$/;
$handle = IO::Socket::UNIX->new(Peer => $socket)
    or die "can't connect to socket $socket: $!";
my $time = time;
print $handle <<END;
hello_mid . 1
time: $time

END

$handle->autoflush(1);              # so output gets there right away

# split the program into two processes, identical twins
die "can't fork: $!" unless defined($kidpid = fork());

# the if{} block runs only in the parent process
if ($kidpid) {
    # copy the socket to standard output
    while (defined ($line = <$handle>)) {
	print $line;
    }
    kill("TERM", $kidpid);                  # send SIGTERM to child
}
# the else{} block runs only in the child process
else {
    # copy standard input to the socket
    while (defined ($line = <STDIN>)) {
	chomp $line;
	print $handle "$line$MSG_EOL";
    }
}
