Schrift
[thread]7201[/thread]

Multithread Server mit fork: Childs beenden sich nicht (Seite 3)

Leser: 1


<< |< 1 2 3 >| >> 26 Einträge, 3 Seiten
kevin
 2005-08-12 10:51
#57126 #57126
User since
2005-08-10
24 Artikel
BenutzerIn
[default_avatar]
Naja, das ist aber auch nicht die feine englische Art...
kevin
 2005-08-12 12:34
#57127 #57127
User since
2005-08-10
24 Artikel
BenutzerIn
[default_avatar]
... und geht auch nicht.

Ich kann die Child - Prozesse noch nicht mal von der Konsole aus mit kill -9 PID killen. Sie bleiben einfach da (allerdings als <defunct>).
kevin
 2005-08-12 13:50
#57128 #57128
User since
2005-08-10
24 Artikel
BenutzerIn
[default_avatar]
Habs hinbekommen, läuft jetzt alles super, Danke nochmal an alle Helfer.

Gruß Kevin
renee
 2005-08-12 14:29
#57129 #57129
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Wäre nett, wenn Du auch noch die Lösung preisgeben würdest...
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
kevin
 2005-08-12 14:47
#57130 #57130
User since
2005-08-10
24 Artikel
BenutzerIn
[default_avatar]
Kein Problem. Da war ein Fehrer bei der Signalverarbeitung. Ich schicke am besten nochmal das gesamte Script:

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
41
42
43
#!/usr/bin/perl
use strict;
use warnings;
use IO::Socket;
use POSIX qw(:sys_wait_h);

my $port = 2345;
my $quit = 0;

$SIG{INT} = sub { $quit++; };

sub REAPER {
while (waitpid(-1, WNOHANG) > 0) {
}
}
$SIG{CHLD} = \&REAPER;

my $socket = IO::Socket::INET->new(
Listen => 20,
LocalPort => $port,
Timeout => 60*60,
Reuse => 1) ||
die "Konnte Socket nicht oeffnen: $!\n";

print "Verbindung auf Port $port wird erwartet...\n";

while(!$quit) {
next unless my $session = $socket->accept();
print $session->peerhost."\n";
my $child = fork();
die "Forking nicht mgoelich: $!\n" unless defined $child;
unless($child) {
$socket->close;
my $peer = gethostbyaddr($session->peeraddr,AF_INET) || $session->peerhost;
print "Verbindung von $peer auf Port $port akzeptiert ($$)\n";
print $session "Hallo $peer\n";
while(<$session>) {
print $session "test\n";
}
exit 0;
}
$session->close;
}
Strat
 2005-08-12 15:00
#57131 #57131
User since
2003-08-04
5246 Artikel
ModeratorIn
[Homepage] [default_avatar]
portabler wird es uebrigens, wenn du anstelle von \n immer $CRLF (oder die Konstante CRLF) aus dem Modul Socket verwendest... und vor dem while(<$session>) auch ein local $/ = $CRLF; setzt... damit sich client und server ueber die zeilenendezeichen einig sind...
Code: (dl )
use Socket qw(:crlf);

oder besser:
Code: (dl )
use IO::Socket qw(:crlf);

(IO::Socket laedst du ja eh schon)\n\n

<!--EDIT|Strat|1123844573-->
perl -le "s::*erlco'unaty.'.dk':e,y;*kn:ai;penmic;;print"
http://www.fabiani.net/
<< |< 1 2 3 >| >> 26 Einträge, 3 Seiten



View all threads created 2005-08-10 17:17.