Schrift
[thread]4419[/thread]

HTTP::Daemon mit fork: ... funktioniert nur ein mal

Leser: 1


<< >> 5 Einträge, 1 Seite
jan
 2006-04-16 22:55
#37234 #37234
User since
2003-08-04
2536 Artikel
ModeratorIn
[Homepage] [default_avatar]
mh, ich bin irgendwie betriebsblind geworden.

kann mir mal jemand auf die sprünge helfen, warum
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
#!/usr/bin/perl -w
use strict;
use warnings;
use HTTP::Daemon;
use LWP::UserAgent;

our $PORT = 8018;
our $ADDRESS = '127.0.0.1';

$SIG{PIPE} = 'IGNORE';
$SIG{CHLD} = sub { wait(); };

my $srv = HTTP::Daemon->new(
LocalPort => $PORT,
LocalAddr => $ADDRESS,
Reuse => 1
);

die "Can't start server ($@)" unless defined $srv;

print "Server listening at port $PORT\n";

my $ua = LWP::UserAgent->new();

while(my $conn = $srv->accept())
{

defined(my $pid = fork()) or die "Can't fork!";

next if($pid);

while (my $request = $conn->get_request)
{
my $response = $ua->simple_request($request);
$conn->send_response($response);
}
$conn->close;

exit(0);
}


nur ein mal forked und sich dann beendet?

soweit ich das ganze verstanden habe, soll

Code: (dl )
while(my $conn = $srv->accept())

so lange blocken, bis wieder ein request eingegangen ist. tut's aber nicht. prozess wird geforked, das child bearbeitet den request korrekt, beendet sich und dann ist die while vorbei und das programm beendet sich vollkommen normal. aber warum?

inspiriert ist das ganze von
http://www.linux-magazin.de/Artikel/ausgabe/2001/05/perl/perl.html

das script von michael schilli funktioniert bei mir absolut korrekt - bis auf, dass es auch nur einmal abläuft.

auf zwei debian-servern getestet, auf beiden das selbe ergebnis.

kann mir mal eben jemand erklären, wo das problem liegt?
esskar
 2006-04-16 23:37
#37235 #37235
User since
2003-08-04
7321 Artikel
ModeratorIn

user image
ich hab unter windows auch seltsame Probleme mit der OO Version von Socket.
Schau mal in folgenden Code von CPAN:Catalyst::Engine::Http (<-- bei mir geht CPAN gerade nicht, deswegen noch die Trunk version: http://dev.catalyst.perl.org/browser....HTTP.pm ) Da hab ich es ganz gut hinbekommen, aber bei der OO Version musste ich auch passen.
ptk
 2006-04-17 14:05
#37236 #37236
User since
2003-11-28
3645 Artikel
ModeratorIn
[default_avatar]
Versuch mal, aus der äußeren while-Schleife eine Endlosschleife zu machen, etwa so:
Code: (dl )
1
2
3
4
while(1) {
my $conn = $srv->accept();
next if !$conn;
... weiter wie bislang ...

Aber frag mich nicht nach dem Grund...
jan
 2006-04-17 17:21
#37237 #37237
User since
2003-08-04
2536 Artikel
ModeratorIn
[Homepage] [default_avatar]
:) ja, das war's, hatte mike mir auch empfohlen.

kA, hinterfragen wir das glück nicht und erfreuen uns daran.
esskar
 2006-04-17 18:53
#37238 #37238
User since
2003-08-04
7321 Artikel
ModeratorIn

user image
[quote=jan,17.04.2006, 15:21]:) ja, das war's, hatte mike mir auch empfohlen.

kA, hinterfragen wir das glück nicht und erfreuen uns daran.[/quote]
vielleicht sollte ich das auch mal bei catalyst versuchen
<< >> 5 Einträge, 1 Seite



View all threads created 2006-04-16 22:55.