sub relay{ my $self = shift; if(!ref($self)){ croak "can not call relay from a class"; } my $handle = $self->{input}->{fh}; given ($self->{input}->{type}){ when ('named_pipe'){ open $handle,'<',$self->{input}->{name}; while(<$handle>){ $self->_write($_); } } when('unix_socket'){ while(my $socket = $handle->accept()||croak "$!"){ while(<$socket>){ my $data = $_; print "I receive $data\n"; $self->_write($data); } } } when('network_socket'){ print "gonna try and listen on network socket named $self->{input}->{name}\n"; my $socket = $handle->accept()||croak"$!"; print "listening\n"; while(<$socket>){ my $data = $_; print "I receive $data\n"; $self->_write($data); } } } } sub _write{ my $self = shift; if(!ref $self){ croak "can not do that as a class!"; } my $input = shift; my @keys = keys $self->{output}; foreach my $key (@keys){ if(!defined($self->{output}->{$key}->{fh}) && !$self->{output}->{$key}->{type} eq 'named_pipe'){ croak "undefined fh for key $key\n"; } given($self->{output}->{$key}->{type}){ when('named_pipe'){ open my $handle ,'>',$self->{output}->{$key}->{name} or croak "could not open output handle"; print $handle $input; close $handle; } when('unix_socket'){ my $server = $self->{output}->{$key}->{fh}; my $socket = $server->accept() or croak "$!"; print "trying to send $input to $self->{output}->{$key}->{name}"; print $socket $input or croak "$!"; } when('network_socket'){ my $server = $self->{output}->{$key}->{fh}; my $socket = $server->accept() or croak "$!"; print "tring to send $input to inet\n"; print $socket $input; print "done printing\n"; } } } } #### open my $fh,'<',$request_file_name; my $params; eval{$params = fd_retrieve($fh)}; if($@){ print "continuing after error $@"; close $fh; redo; } #### my $recsock; while(!defined $recsock){ eval{$recsock = IO::Socket::INET->new(PeerAddr=>'localhost',PeerPort=>1066,Proto=>'tcp')||croak"$!"}; } print "son here, opening inbound socket\n"; while(<$recsock>){ print "received $_"; } #### my $c = 0; print"creating socket\n"; my $sock; while(!defined($sock)){ eval{$sock = IO::Socket::INET->new(PeerAddr=>'localhost',PeerPort=>1065,Proto=>'tcp')or croak "$!"}; } while(1){ my $data = "trololol ".$c."\n"; print $sock $data or croak "$!"; $c++; } #### $messenger_params{input}->{fh} = IO::Socket::INET->new( Listen=>$params->{input}->{Listen}, LocalAddr=>$params->{input}->{loca_addr}, Type=>SOCK_STREAM, Proto=>'tcp', Reuse=>1, LocalPort=>$params->{input}->{local_port}, )or croak "$!"; #and for the second one : $messenger_params{output}->{$key}->{fh} = IO::Socket::INET->new( LocalAddr=>$params->{output}->{$key}->{local_addr}, LocalPort=>$params->{output}->{$key}->{local_port}, Type=>SOCK_STREAM, Proto=>'tcp', Reuse=>1, Listen=>$params->{output}->{$key}->{listen}, )or croak "$!";