Thread Net:Server crashed mit Backticks (`): evtl. fork Problem (3 answers)
Opened by betterworld at 2003-10-08 16:45

michael
 2003-10-09 17:05
#38424 #38424
User since
2003-10-09
2 Artikel
BenutzerIn
[default_avatar]
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;

View full thread Net:Server crashed mit Backticks (`): evtl. fork Problem