Beefy Boxes and Bandwidth Generously Provided by pair Networks
Perl Monk, Perl Meditation

Re: Daemon with Net::Daemon

by bm (Hermit)
on Sep 02, 2003 at 10:31 UTC ( #288284=note: print w/replies, xml ) Need Help??

in reply to Daemon with Net::Daemon

Here is an explanation of Net::Daemon.

Define a new class that inherits from Net::Daemon in

require Net::Daemon; package Contdmon; use vars qw(@ISA); @ISA = qw(Net::Daemon); # to inherit from Net::Daem
In your class's constructor, call the Net::Daemon constructor and then do any other initialisation you need.
sub new ($$;$) { my($class, $attr, $args) = @_; my($self) = $class->SUPER::new($attr, $args); # set up the logfile my $file = IO::File->new ( '/path', "a" ); $file->autoflush ( 1 ) ; $self->{'logfile'} = $file; $self; }
Now write your Run method. This method overrides the Run method in Net::Daemon. It is executed whenever a client connects to the daemon
sub Run ($) { my($self) = @_; my($line, $result, $sock); $sock = $self->{'socket'}; while (1) { if (!defined($line = $sock->getline())) { if ($sock->error()) { $self->Error("Client connection error %s", $sock->error()); } $sock->close(); return; } } print "Server received request: $line\n"; }
Now go ahead and create your server
package main; my $args = { 'facility' => 'daemon', 'pidfile' => '/users/ccm_root/logs/', 'logfile' => '/users/ccm_root/logs/contdaem.log', 'user' => 'ccm_root', 'group' => 'ccm_root', 'localport' => '5440', 'mode' => 'single', }; my $server = Contdmon->new ({}, $args); $server->Bind();
So at this point you have a daemon sitting there waiting for a request. Run this script on server A.
Now you need a client to submit a request from server B. In
use strict; use IO::Socket; $| = 1; # flush output buffers immediately my ( $host ) = 'server'; my ( $port ) = 1234; # create the socket my $sock = IO::Socket::INET->new ( Proto => 'tcp', Type => SOCK_STREAM, PeerAddr => $host, PeerPort => $port ) or die "Cannot create socket : $!"; # so output goes to daemon immediately $sock->autoflush (1); print $sock "What is the time, Mr Wolf?\n";
Run on your client machine, webserver(B), and it will send a request via the TCP protocol to your daemon waiting on server A.
Note that there are some security concerns with this. Don't let your daemon accept just any list of commands to run on server A. Perhaps sends 'RunA' from, and your daemon will then go ahead and execute a hardcoded set of commands before sending back the response.
Hope this helps

Log In?

What's my password?
Create A New User
Node Status?
node history
Node Type: note [id://288284]
and John Coltrane plays...

How do I use this? | Other CB clients
Other Users?
Others making s'mores by the fire in the courtyard of the Monastery: (5)
As of 2017-02-27 00:03 GMT
Find Nodes?
    Voting Booth?
    Before electricity was invented, what was the Electric Eel called?

    Results (376 votes). Check out past polls.