[Moscow.pm] AnyEven::HTTP перед и после fork с сокетами между процессами

Гришаев Анатолий 0body0 на rambler.ru
Ср Окт 16 03:50:39 PDT 2013


А если исключить ресолвер  как в предыдущем письме?

Тоже зависает?

16.10.2013 14:46, ksvs пишет:
> А у меня зависает.
>
>
>
> On Wednesday, 16 October 2013, 13:02, Гришаев Анатолий 
> <0body0 на rambler.ru> wrote:
> Перед форком или сразу после нужно очистить кэш DNS:
> $AnyEvent::DNS::RESOLVER = undef;
>
>
> Вот уже работающий пример:
> ==============================
> $| = 1;
> use strict;
> use warnings;
> use AnyEvent::DNS ();
>
> use EV;
> $EV::FLAG_FORKCHECK = 1;
> use AnyEvent;
> use AnyEvent::HTTP;
>
> my $URL = "http://www.bing.com <http://www.bing.com/>";
>
> if ($ARGV[0]) {
>     my $w = AnyEvent->condvar;
>     http_get $URL, persistent => 0, keepalive => 0, sub {
>         print ". $_[1]{Status} $_[1]{Reason} $_[1]{URL}; $$\n";
>         $w->send;
>     };
>     $w->recv;
>     print "...\n";
> }
>
> use IO::Socket;
> socketpair(my $child, my $parent, AF_UNIX, SOCK_STREAM, PF_UNSPEC) or
> die "socketpair: $!";
>
> $AnyEvent::DNS::RESOLVER = undef;
> my $kid_pid = fork;
> defined $kid_pid or die "Can't fork: $!";
>
> unless ($kid_pid) {
>     close $child;
>     my $w = AnyEvent->condvar;
>     my $wr = AnyEvent->io(fh => $parent, poll => "r", cb => sub {
>         my $len = sysread $parent, my $buf, 1024;
>         unless ($len) {
>             # print"child EXIT\n";
>             exit;
>         };
>         print $buf;
>
>         http_get $URL, persistent => 0, sub {
>             print "+ $_[1]{Status} $_[1]{Reason} $_[1]{URL}; $$\n";
>             syswrite $parent, "pong\n";
>         };
>     });
>     $w->recv;
>     exit;
> } else {
>     close $parent;
>     my $i = 0;
>     my $w = AnyEvent->condvar;
>     my $wr = AnyEvent->io(fh => $child, poll => "r", cb => sub {
>         sysread $child, my $buf, 1024;
>         # print $buf;
>         if (++$i > 3) {
>             # print "parent EXIT\n";
>             exit;
>         } else {
>             syswrite $child, "ping $i\n";
>         }
>     });
>     syswrite $child, "ping $i\n";
>     $w->recv;
> }
>
> ==============================
>
>
> -- 
> С уважением Анатолий.
>
> -- 
> Moscow.pm mailing list
> moscow-pm на pm.org <mailto:moscow-pm на pm.org> | http://moscow.pm.org 
> <http://moscow.pm.org/>
>
>
>
>


-- 
С уважением Анатолий.
----------- следущая часть -----------
Вложение в формате HTML было извлечено…
URL: <http://mail.pm.org/pipermail/moscow-pm/attachments/20131016/0108adc8/attachment.html>


Подробная информация о списке рассылки Moscow-pm