AC-DC
view release on metacpan or search on metacpan
lib/AC/DC/IO/Forked.pm view on Meta::CPAN
func => $func,
args => $args,
@_
}, $class;
debug("new forked");
return $me;
}
sub start {
my $me = shift;
debug("starting forked");
my($fda, $fdb);
unless( socketpair($fda, $fdb, AF_UNIX, SOCK_STREAM, PF_UNSPEC) ){
problem("socketpair failed: $!");
return ;
}
my $pid = fork();
if( !defined($pid) ){
problem("cannot fork: $!");
lib/AC/DC/IO/TCP.pm view on Meta::CPAN
my $me = bless {
@_
}, $class;
debug("new tcp");
return $me;
}
sub start {
my $me = shift;
my $fd = shift;
$me->init($fd);
$me->wantread(1);
return $me;
}
sub _readable {
my $me = shift;
lib/AC/DC/IO/TCP/Client.pm view on Meta::CPAN
our @ISA = 'AC::DC::IO::TCP';
sub new {
my $class = shift;
my $addr = shift;
my $port = shift;
($addr, $port) = $class->use_addr_port( $addr, $port );
debug("starting new tcp client: $addr:$port");
my $ip = inet_aton($addr);
unless($ip){
verbose("tcp client cannot resolve '$addr'");
return ;
}
my $me = $class->SUPER::new( @_ );
$me->{tcp_server_ip} = $ip;
$me->{tcp_server_addr} = $addr;
$me->{tcp_server_port} = $port;
return $me;
}
sub start {
my $me = shift;
my $fd;
my $i = socket($fd, PF_INET, SOCK_STREAM, 0);
$me->SUPER::start($fd);
unless( $i ){
verbose("tcp client socket failed: $! ($me->{info})");
$me->run_callback('error', { cause => 'socket', error => "socket failed: $!" });
$me->shut();
return ;
}
while(1){
my $i = connect($fd, sockaddr_in($me->{tcp_server_port}, $me->{tcp_server_ip}) );
last if $i; # success
lib/AC/DC/Protocol.pm view on Meta::CPAN
my $timeo = shift;
$timeo ||= 1;
# set non-blocking
my $fl = fcntl($s, F_GETFL, 0);
fcntl($s, F_SETFL, O_NDELAY);
my $fn = fileno($s);
my $data;
my $start = time();
while( my $len = $size - length($data) ){
$len = $BUFSIZ if $len > $BUFSIZ;
my $rfd = "\0\0\0\0";
vec($rfd, $fn, 1) = 1;
my $to = $start + $timeo - time();
my $t0 = time();
my $si = select($rfd, undef, undef, $to);
next if $si == -1 && $! == EINTR;
confess "read data failed: $!\n" if $si == -1;
confess "read timeout " . (time() - $t0) . "\n" unless vec($rfd, $fn, 1);
my $i = sysread($s, $data, $len, length($data));
next if !defined($i) && $! == EINTR;
confess "read failed: connection closed (read " . length($data) . " of $len)\n" if $i == 0;
lib/AC/Daemon.pm view on Meta::CPAN
*stack_trace = sub {};
}
}
our @EXPORT = qw(daemonize run_and_watch initlog debugmsg verbose problem fatal);
my $childpid;
my $verbose = 1;
my $nomail = 0;
my $syslog;
my @maybe_argv = @ARGV; # save for restart (might not be available)
sub daemonize {
my $tout = shift;
my $name = shift;
my $argv = shift;
fork && exit; # background ourself
$verbose = 0;
my @argv = $argv ? @$argv : @maybe_argv;
lib/AC/Daemon.pm view on Meta::CPAN
AC::Daemon - daemon program utility functions.
=head1 SYNOPSIS
use AC::Daemon;
use strict;
initlog( 'program', 'local5' );
daemonize( 5, 'program', \@ARGV ) unless $opt{foreground};
verbose( 'starting.' );
run_and_watch( $opt{foreground}, \&myfunction );
exit;
=cut
1;
( run in 0.473 second using v1.01-cache-2.11-cpan-fd5d4e115d8 )