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

ksvs ksvs1996 на ymail.com
Ср Окт 16 03:46:02 PDT 2013


А у меня зависает.





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";

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 | http://moscow.pm.org
----------- следущая часть -----------
Вложение в формате HTML было извлечено…
URL: <http://mail.pm.org/pipermail/moscow-pm/attachments/20131016/348ab43c/attachment-0001.html>


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