Thread Net:Server crashed mit Backticks (`): evtl. fork Problem
(3 answers)
Opened by betterworld at 2003-10-08 16:45
Hallo,
nach zwei erfolglosen Tagen habe ich mir gedacht, ich probier es mal einfach. Net::Server::PreFork erbt von Net::Server::PreForkSimple. Damit funktioniert es aber noch nicht. Net::Server::PreForkSimple erbt von Net::Server::Fork und dmait geht es plötzlich. Es scheint also, als ob PreForkSimple unsauber programmiert ist oder zumindest Perl stark ausreizt. Zwecks Demonstration habe ich mal Server und Client in ein Skript gepackt. Einfach "perl net_server.pl" aufrufen und staunen. Wenn man den Fehlerfall bewundern will, dann Net::Server::Fork durch PreFork oder PreForkSimple ersetzen. Für Erhellendes wäre ich trotzdem dankbar - Verstehen ist immer besser als Umgehen ohne zu wissen was. Grüße Micha -----------------------net_server.pl---------------------------------- use lib '/home/michael/OpenCA/Test/test1/modules/perl5'; use Net::Server::Fork; use strict qw (@ISA); package MyServer; @ISA = qw(Net::Server::Fork); ## activate server my $pid = fork (); if (not $pid) { MyServer->run ( proto => "unix", port => "/tmp/server_socket|unix"); } ## test server sleep 1; for (my $i=1; $i<11; $i++) { client (); } kill 15, $pid; ## client activity sub client { use Socket; ## Unix socket my $socket_name = "/tmp/server_socket"; socket(SOCK, PF_UNIX, SOCK_STREAM, 0) || die ("Cannot create new client socket ($socket_name)."); connect(SOCK, sockaddr_un($socket_name)) || die ("Server is not online or does not accept requests ($socket_name - ".sockaddr_un($socket_name)."). $?"); my $line; while (read (SOCK, $line, 1024)) { print "Client: ${line}\n"; } close SOCK; } ## server activity sub process_request { my $help = `ls`; print $help; } 1; |