sub retrieve
{
my ($self, $var) = @_;
$var = $self->{vars}->{$var->{name}.$var->{ref}};
my $address = exists($$var->{address}) ? $$var->{address} : '127.0.0.1';
my $message = IO::Socket::INET->new
(
Proto => 'tcp',
PeerAddr => $address,
PeerPort => $$var->{port},
) or die ( $self->cleanup($!) );
$message->autoflush(1);
my $port = $message->sockport;
if ($$var->{debug})
{
print "Connected to ", $$var->{ref}, " for retrieving:\n";
print "\tPeerhost: ", $message->peerhost, "\n";
print "\tPeerport: ", $message->peerport, "\n";
print "\tLocalhost: ", $message->sockhost, "\n";
print "\tLocalport: ", $message->sockport, "\n\n";
}
my $header = crypt(crypt($$var->{ref},$$var->{ref}),$$var->{ref});
syswrite($message, $header."\bl\b", 3+length($header));
$message->close;
$message = IO::Socket::INET->new
(
Listen => SOMAXCONN,
LocalPort => $port,
Reuse => 1,
LocalAddr => '127.0.0.1',
) or croak ( $self->cleanup($!) );
if ($$var->{debug})
{
print "Listening for ", $$var->{ref}, ":\n";
print "\tLocalport: ", $message->sockport, "\n\n";
}
while (my $connection = $message->accept)
{
if ($$var->{debug})
{
print "Recieved a connection from ", $$var->{ref}, ":\n";
print "\tPeerhost: ", $connection->peerhost, "\n";
print "\tPeerport: ", $connection->peerport, "\n";
print "\tLocalhost: ", $connection->sockhost, "\n";
print "\tLocalport: ", $connection->sockport, "\n\n";
}
my $sent = <$connection>;
$connection->close if $connection;
$sent = join('',map(chr,split(/\*/,$sent)));
$sent = thaw($sent);
$message->close;
return $$sent;
}
$message->close if $message;
}
####
sub retrieve
{
my ($self, $var) = @_;
$var = $self->{vars}->{$var->{name}.$var->{ref}};
my $address = exists($$var->{address}) ? $$var->{address} : '127.0.0.1';
my $message = IO::Socket::INET->new
(
Proto => 'tcp',
PeerAddr => $address,
PeerPort => $$var->{port},
) or die ( $self->cleanup($!) );
$message->autoflush(1);
my $header = crypt(crypt($$var->{ref},$$var->{ref}),$$var->{ref});
syswrite($message, $header."\bl\b", 3+length($header));
my $sent = <$message>;
$sent = join('',map(chr,split(/\*/,$sent)));
$sent = thaw($sent);
$message->close if $message->connected;
return $$sent;
####
sub retrieve
{
my ($self, $var) = @_;
$var = $self->{vars}->{$var->{name}.$var->{ref}};
my $address = exists($$var->{address}) ? $$var->{address} : '127.0.0.1';
my $incoming = IO::Socket::INET->new
(
Listen => SOMAXCONN,
LocalAddr => '127.0.0.1',
Reuse => 1,
) or croak ( $self->cleanup($!) );
my $port = $incoming->sockport;
$incoming->shutdown(1);
my $message = IO::Socket::INET->new
(
Proto => 'tcp',
PeerAddr => $address,
PeerPort => $$var->{port},
) or die ( $self->cleanup($!) );
$message->autoflush(1);
my $header = crypt(crypt($$var->{ref},$$var->{ref}),$$var->{ref});
syswrite($message, $header."\bl\b".$port, 3+length($header)+length($port));
my $sent = <$connection>;
$sent = join('',map(chr,split(/\*/,$sent)));
$sent = thaw($sent);
$incoming->close if $incoming->connected;
$message->close if $message->connected;
$connection->close if $connection->connected;
return $$sent;
}