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; }