shabbu has asked for the wisdom of the Perl Monks concerning the following question:

Hello,

I have a Perl CGI server, which forks itself and connects to external systems using CPAN modules. I would like to enahnce the CGI server by maintaing a list of already connected systems and resue the connections. As of now since connection happens in the fork, all of that information is lost after child finishes. I downloaded and compiled latest Perl to seed if I can use threads to do the job, but sharing connection objects( I have not succeeded) seems very complicated. CPAN modules that I am using are Net:Telnet. Any suggestions or rough ideas is greatly appreciated.

Thanks

Ashok

Replies are listed 'Best First'.
Re: How to approach this i by Perl?
by suaveant (Parson) on Jan 04, 2010 at 20:59 UTC
      I am not quite sure how I can use socketpair to resolve my issue.

      I think I will try to get the threaded program working. I will need some help. Here is relevant sections of the code

      use vars qw(%conn $ssh); share(%conn); share($ssh); #code run by thread #Here is where I get the error #Invalid value for shared scalar at $ssh = function(); # in the function sub function { # Create a new pseudo terminal $pty = new IO::Pty $ssh = new Net::Telnet (-fhopen => $pty) return $ssh } # in the Telnet module the code looks like this sub new { my ($class) = @_; $self = $class->SUPER::new; *$self->{net_telnet} = { bin_mode => 0, blksize => &_optimal_blksize(), . . . } $self }

      Any idea how I can go about sharing $ssh object created by thread? Is it worth pursuing to use thread to solve this?

      Thanks Ashok

        You said you create forks, I assume you have a central script that these forks are created from. Create a socket pair for each fork and pass data back and forth over them. You can use something like IO::Select to see what has data waiting. Another option would be to maintain a file or directory with proper locking, or use regular sockets. There are many ways to go about it. Even signals could probably work for minor notification stuff.

                        - Ant
                        - Some of my best work - (1 2 3)