|
ru.perl- RU.PERL ---------------------------------------------------------------------- From : Ilia Semenov 2:5000/362.37 19 Jan 2001 15:30:32 To : All Subject : fork в activestate perl? -------------------------------------------------------------------------------- выпрямите руки, плиз. был взят заведомо работающий под *nix исходник, который зависал под NT+activestate. исследования вылились в следующее: никаких ошибок не происходит, но после форка $daemon и $client->daemon указывают в другое место в памяти (это понятно) и getsockname на них зависает (а вот это мне непонятно). === cut === use HTTP::Daemon; STDOUT->autoflush(1); my $daemon = new HTTP::Daemon LocalAddr => "localhost", LocalPort => 8888, Reuse => 1, Listen => 40 or die "HTTP::Daemon failed to initialize: $!\n"; while ( my $client = $daemon->accept ) { defined($client) or die "Child died: ".$daemon->reason; print "BEFORE: ".$client->daemon."\n"; getsockname($client->daemon); print "BEFORE: getsockname OK.\n"; defined(my $pid = fork) or die "Can't fork: $!"; if ( $pid ) # I am parent { print "PARENT: ".$client->daemon."\n"; getsockname($client); print "PARENT: getsockname OK.\n"; undef($client); } else # I am child { print "CHILD: ".$client->daemon."\n"; getsockname($client->daemon); print "CHILD: getsockname OK.\n"; print "child done.\n"; } } print "parent done.\n"; === cut === это выдает (при одном коннекте) следующее: BEFORE: HTTP::Daemon=GLOB(0x1a729cc) BEFORE: getsockname OK. PARENT: HTTP::Daemon=GLOB(0x1a729cc) PARENT: getsockname OK. CHILD: HTTP::Daemon=GLOB(0x358e43c) ...и child повисает. --- good luck! spider [mailto:root@lavric-nsu-ru] [icq#390333] [voice#328890] * Origin: Akademgorodok, Novosibirsk, Russia (2:5000/362.37) Вернуться к списку тем, сортированных по: возрастание даты уменьшение даты тема автор
Архивное /ru.perl/39423a67fcdc.html, оценка из 5, голосов 10
|