Перед форком или сразу после нужно очистить кэш 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
[email protected] | http://moscow.pm.org

Ответить