Sp0rk has asked for the wisdom of the Perl Monks concerning the following question:
Dear Perlmonks,
I implore you to aid me with a boggle. I have need to open multiple bi-directional socket connections and read data from either as it arrives (preferbly a line at a time), but find then when I do, the first attempt to read blocks. I am using netcat to handle the socket connection itself. Your wisdom and guidance would be greatly appreciated.
Sample Code:
#!/bin/env perl use IPC::Open2; # for two-way communication via pipe my @ports = qw /2222 3333/; my $isRunning = 1; my $connections = (); # hashref of port connections # store file handles and pid for each opened port in @ports foreach $port ( @ports ) { local ( *Reader, *Writer ); my $pid = open2(\*Reader, \*Writer, "nc -l -p $port\n") && print "Opened local port for IO: $port\n"; $connection->{$port}->{"pid"} = $pid; $connection->{$port}->{"Reader"} = *Reader; $connection->{$port}->{"Writer"} = *Writer; } # Listen to each port and reply to whatever comes in while ($isRunning){ foreach $port ( @ports ) { my $Reader = $connection->{$port}->{"Reader"}; my $Writer = $connection->{$port}->{"Writer"}; if ( $_ = <$Reader> ) { print $Writer &readAndFormResponse($port , $_); } } } # Dummy handler sub readAndFormResponse { my $port = shift; my $data = shift; return "Reply to port: $port\n"; }
|
|---|
| Replies are listed 'Best First'. | |
|---|---|
|
Re: Managing multiple bi-directional pipes
by salva (Canon) on Dec 15, 2010 at 19:25 UTC | |
|
Re: Managing multiple bi-directional pipes
by zentara (Cardinal) on Dec 16, 2010 at 12:54 UTC |