[SP-pm] forks + daemon + socket

Alexei Znamensky russoz at gmail.com
Fri Nov 27 03:23:03 PST 2009


Mr Lamb,

no seu código ce tá criando socket tipo UNIX (arquivo), e no erro do log tá
aparecendo socket tipo INET (TCP)... tá certo isso?

[]s,
Russian

2009/11/27 Andre Carneiro <andregarciacarneiro em gmail.com>

> Salve pessoal!
>
>
> Estou tendo um problema utilizando o módulo forks.
>
> Enquanto eu não faço o 'daemonize' no meu daemon, funciona tudo blz. No
> entanto, quando o 'daemonize' acontece, tudo que é executado através de
> forks gera "conexão recusada" no socket.
>
> <code>
> .
> .
> .
> use App::Daemon qw( daemonize );
> use POSIX qw(:signal_h );
> use Getopt::Long;
> use IO::Socket::UNIX;
>
> #DAEMON
>     my $SOCKFILE    = '/tmp/socktest';
>     unlink $SOCKFILE or die $! if -e $SOCKFILE;
>     daemonize() if $daemonize == 1;
>     my $usock = IO::Socket::UNIX->new(    Type     => SOCK_STREAM ,
>                         Local    => '/tmp/socktest' ,
>                         Listen    => 1
>                     ) or die $!;
>     my $r = ();
>     chmod 0777 , $SOCKFILE;
>     my %Process;
>
>     while(1){
>         if(my ($r) = $usock->accept){
>                        #c
>
>         }else{
>               die "\nSOCKET NAO FOI ACEITO!!! $! $@\n";
>         }
>     }
>
>
> </code>
> #cliente
> .
> .
> .
> use IO::Socket::UNIX;
> use Getopt::Std;
> use Config::General;
> use Data::Dumper;
>
> my $conf_obj    = Config::General->new('config/general.conf');
> my %config    = $conf_obj->getall();
> my $SOCKETFILE     = '/tmp/socktest';#$config{defaults}->{scap_socket};
>
> @ARGV < 1 and die "Parametros invalidos\n";
>
> my $usock = new IO::Socket::UNIX(
>     Type  => SOCK_STREAM,
>     Peer => $SOCKETFILE,
> ) or die "Impossivel abrir Socket: $! $@ em " . $SOCKETFILE;
>
>
>
> my %args;
> getopts("r:s:p:", \%args);
> if($args{r}) {
>     print "Executar Spider $args{r} $args{p}\n";
>     print $usock "run $args{r} $args{p}" or die $!;
> }
> elsif($args{s}) {
>     print "Parar Spider $args{s}\n";
>     print $usock "stop $args{s}";
> }
>
>
> O cliente acima instancia uma classe que executa o seguinte trecho de
> código abaixo...
>
>
> <code>
> .
> .
> .
>
> use forks;
> use MooseX::Singleton;
> use Config::General;
> .
> .
> .
>
> foreach my $t(@{$thread}){
>                 $self->log_spider->write("debug","Thread $i");
>                 eval{$Threads[$i] =
> threads->create('init_thread',$self,$t,$cf)};
>                 if($@){
>                     $self->log_spider->write("error","Erro ao criar Thread
> $i: $@ $!");
>                     exit(0);
>
>                 }else {
>                     $self->stat->dbic($conns->[$i]); #setando a conex?o do
> pool de conex?es.
>                     $i++;
>                 }
>             }
>             foreach my $t (1..$#Threads) {$Threads[$t]->join;}
> .
> .
> .
> .
>
> sub init_thread {
>     my ($self,$thread) = @_;
>             #várias ações aqui...
>             sleep 1;
> }
>
>
> </code>
>
>
>
> Quando a coisa toda é executada, o que ocorre é isso:
>
>
> <trecho do log>
>
>
> [Thu Nov 26 18:57:16 2009] [SCAP2] [debug] Thread 1
> [Thu Nov 26 18:57:17 2009] [SCAP2] [error] Erro ao criar Thread 1:
> (13981): Couldn't connect to query server: IO::Socket::INET: connect:
> Conex�o recusada at /usr/local/lib/perl/5.10.0/forks.pm line 3592
>         threads::_croak('Couldn\'t connect to query server:
> IO::Socket::INET: connect:...') called at /usr/local/lib/perl/5.10.0/
> forks.pm line 2113
>         threads::_init_thread('HASH(0x98d7f50)', '', undef, undef) called
> at /usr/local/lib/perl/5.10.0/forks.pm line 761
>         threads::new('threads', 'init_thread', 'Spider=HASH(0xaa1af10)',
> 'HASH(0xaa6e980)', 'HASH(0xa8fdc30)') called at
> /home/andre/git/scap/lib/Spider.pm line 264
>         eval {...} called at /home/andre/git/scap/lib/Spider.pm line 264
>         Spider::load_sources('Spider=HASH(0xaa1af10)', 'ARRAY(0xaa6e920)',
> 'HASH(0xa8fdc30)', 'HASH(0xaa6e120)') called at
> /home/andre/git/scap/lib/Spider.pm line 123
>         Spider::start('Spider=HASH(0xaa1af10)') called at ./scap2d line 251
>         main::run('ARRAY(0xa9e1bb8)', 'Spider=HASH(0xaa1af10)') called at
> ./scap2d line 148
>         main::start('Getopt::Long::CallBack=HASH(0xa9f0650)', 1) called at
> /usr/share/perl/5.10/Getopt/Long.pm line 593
>         eval {...} called at /usr/share/perl/5.10/Getopt/Long.pm line 592
>         Getopt::Long::GetOptionsFromArray('ARRAY(0x8c5c420)', 'start',
> 'CODE(0xa9de550)', 'stop', 'CODE(0xa9e21b8)', 'restart', 'CODE(0x90efa48)',
> 'help', 'CODE(0x90efa48)', ...) called at ./scap2d line 72
>  Conex�o recusada
> [Thu Nov 26 18:57:17 2009] [SCAP2] [debug] Thread 2
> [Thu Nov 26 18:57:17 2009] [SCAP2] [debug] Thread 3
> [Thu Nov 26 18:57:17 2009] [SCAP2] [error] Erro ao criar Thread 2:
> (13982): Couldn't connect to query server: IO::Socket::INET: connect:
> Conex�o recusada at /usr/local/lib/perl/5.10.0/forks.pm line 3592
>         threads::_croak('Couldn\'t connect to query server:
> IO::Socket::INET: connect:...') called at /usr/local/lib/perl/5.10.0/
> forks.pm line 2113
>         threads::_init_thread('HASH(0xad41528)', '', undef, undef) called
> at /usr/local/lib/perl/5.10.0/forks.pm line 761
>         threads::new('threads', 'init_thread', 'Spider=HASH(0xaa1af10)',
> 'HASH(0xaa6e910)', 'HASH(0xa8fdc30)') called at
> /home/andre/git/scap/lib/Spider.pm line 264
>         eval {...} called at /home/andre/git/scap/lib/Spider.pm line 264
>         Spider::load_sources('Spider=HASH(0xaa1af10)', 'ARRAY(0xaa6e920)',
> 'HASH(0xa8fdc30)', 'HASH(0xaa6e120)') called at
> /home/andre/git/scap/lib/Spider.pm line 123
>         Spider::start('Spider=HASH(0xaa1af10)') called at ./scap2d line 251
>         main::run('ARRAY(0xa9e1bb8)', 'Spider=HASH(0xaa1af10)') called at
> ./scap2d line 148
>         main::start('Getopt::Long::CallBack=HASH(0xa9f0650)', 1) called at
> /usr/share/perl/5.10/Getopt/Long.pm line 593
>         eval {...} called at /usr/share/perl/5.10/Getopt/Long.pm line 592
>         Getopt::Long::GetOptionsFromArray('ARRAY(0x8c5c420)', 'start',
> 'CODE(0xa9de550)', 'stop', 'CODE(0xa9e21b8)', 'restart', 'CODE(0x90efa48)',
> 'help', 'CODE(0x90efa48)', ...) called at ./scap2d line 72
>  Conex�o recusada
>
>
>
> </trecho do log>
>
>
>
> Alguém já passou por isso?
>
>
>
> Cheers!
>
>
>
> --
> André Garcia Carneiro
> Analista/Desenvolvedor Perl
>
>
>
> _______________________________________________
> SaoPaulo-pm mailing list
> SaoPaulo-pm em pm.org
> http://mail.pm.org/mailman/listinfo/saopaulo-pm
>



-- 
Alexei Znamensky [russoz_gmail_com] [russoz.wordpress.com] [
www.flickr.com/photos/alexeiz]
"Though we live in trying times, we're the ones who have to try"
-------------- Pr�xima Parte ----------
Um anexo em HTML foi limpo...
URL: <http://mail.pm.org/pipermail/saopaulo-pm/attachments/20091127/aeb8c9af/attachment-0001.html>


More information about the SaoPaulo-pm mailing list