Schrift
[thread]7356[/thread]

Problem mit fork() unter Windows



<< |< 1 2 >| >> 14 Einträge, 2 Seiten
sancho
 2005-10-16 14:24
#58881 #58881
User since
2005-10-16
1 Artikel
BenutzerIn
[default_avatar]
Hallo zusammen!

Ich möchte testweise einen Proxy-Server basteln, ich verwende ActivePerl 5.6.1 unter Windows XP mit SP2. Leider gibt es Probleme sobald ich das Skript mit fork() um parallele Prozesse erweitere. Es gibt beim Starten und bei der Ausführung zwar keine Fehler, aber das Programm arbeitet auch nicht wie erwartet, d.h. es passiert sozusagen "gar nichts", und Anfragen von Clients werden nicht bearbeitet. Hat da vielleicht jemand eine heissen Tip für mich? Ich bin fuer jede noch so kleine Hilfe dankbar!

Das ist der Source, ohne die 3 Zeilen um fork() geht alles...

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
use strict;
my $PORT = 8080;

use HTTP::Daemon;
use LWP::UserAgent;

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

my $srv = HTTP::Daemon->new(LocalPort => $PORT, Reuse     => 1);
die "can't start server ($@)" unless defined $srv;
my $ua = LWP::UserAgent->new();
$ua->agent("bla/1.0");

while(my $conn = $srv->accept()) {
  defined(my $pid = fork()) or die "Can't fork!";
 next if $pid;
 while (my $request = $conn->get_request) {
   my $resp = $ua->simple_request($request);
   $conn->send_response($resp);
 }
 $conn->close;
 exit(0);
}


Gruß,
Sancho

edit pq: code-tags hinzugefügt\n\n

<!--EDIT|pq|1129463263-->
esskar
 2005-10-16 16:10
#58882 #58882
User since
2003-08-04
7321 Artikel
ModeratorIn

user image
der socket ist (unter windows) in dem child leider nicht mehr gültig. man kann sockets (unter windows) nicht an einen anderen prozess weitergeben.
Gast Gast
 2005-10-16 16:14
#58883 #58883
Hallo und danke für die Antwort! Was meinst Du wie ich das Problem lösen kann?
Gruß,
Sancho
esskar
 2005-10-16 16:21
#58884 #58884
User since
2003-08-04
7321 Artikel
ModeratorIn

user image
wahrscheinlich gar nicht.
hab damals versucht für cataylst eine "thraed/forked" lösung für deren eingebauter HTTP server zu finden...
hat aber nicht wirklich geklappt
sri
 2005-10-16 21:11
#58885 #58885
User since
2004-01-29
828 Artikel
BenutzerIn
[Homepage] [default_avatar]
[quote=esskar,16.10.2005, 14:21]wahrscheinlich gar nicht.
hab damals versucht für cataylst eine "thraed/forked" lösung für deren eingebauter HTTP server zu finden...
hat aber nicht wirklich geklappt[/quote]
Die aktuelle development version von Catalyst enthaelt einen einfachen fork() server der auch unter Windows funktioniert!

http://dev.catalyst.perl.org/repos....HTTP.pm
ptk
 2005-10-16 21:26
#58886 #58886
User since
2003-11-28
3645 Artikel
ModeratorIn
[default_avatar]
Ich finde da nichts. Oder habe ich den subtilen Humor hier nicht verstanden?
sri
 2005-10-16 21:34
#58887 #58887
User since
2004-01-29
828 Artikel
BenutzerIn
[Homepage] [default_avatar]
[quote=ptk,16.10.2005, 19:26]Ich finde da nichts. Oder habe ich den subtilen Humor hier nicht verstanden?[/quote]
Zeile 111 gehts los...
ptk
 2005-10-16 22:17
#58888 #58888
User since
2003-11-28
3645 Artikel
ModeratorIn
[default_avatar]
In Zeile 140 steht nur fork(). Und kein "MSWin32" weit und breit in Sicht...
sri
 2005-10-16 23:56
#58889 #58889
User since
2004-01-29
828 Artikel
BenutzerIn
[Homepage] [default_avatar]
[quote=ptk,16.10.2005, 20:17]In Zeile 140 steht nur fork(). Und kein "MSWin32" weit und breit in Sicht...[/quote]
Umm...es ist kein MSWin32 block erforderlich!!!
Es ist alles Windows und Unix kompatibel. ;)
ptk
 2005-10-17 00:44
#58890 #58890
User since
2003-11-28
3645 Artikel
ModeratorIn
[default_avatar]
Hmm. Ich dachte, ich bin im fork-funktioniert-nicht-unter-Windows-Thread :-)
<< |< 1 2 >| >> 14 Einträge, 2 Seiten



View all threads created 2005-10-16 14:24.