[SP-pm] forks + daemon + socket

Andre Carneiro andregarciacarneiro at gmail.com
Fri Nov 27 03:52:21 PST 2009


O Socket INET quem usa é o módulo forks....




2009/11/27 Alexei Znamensky <russoz at gmail.com>

> 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 at 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 at 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"
>
> _______________________________________________
> SaoPaulo-pm mailing list
> SaoPaulo-pm at pm.org
> http://mail.pm.org/mailman/listinfo/saopaulo-pm
>



-- 
André Garcia Carneiro
Analista/Desenvolvedor Perl
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.pm.org/pipermail/saopaulo-pm/attachments/20091127/3344ebcb/attachment.html>


More information about the SaoPaulo-pm mailing list