Also hier nochmal der Server von J-jayz-Z:
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
#!/usr/bin/perl
use strict;
use warnings;
use IO::Socket;
my $port = 2345;
my $quit = 0;
$SIG{INT} = sub { $quit++; };
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) {
$SIG{CHLD} = sub { exit 0; };
$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;
}
Klar hab ich das von Strat gelesen.
Wenn ich mich auf den Server mit telnet server 2345 verbinde, forkt er ganz prima und ich habe (mit pstree -p) einen childprozess.
wenn ich die telnetverbindung abbreche, bekomme ich vom Server zwar die Meldung, dass die Verbindung getrennt ist, aber ps zeigt mir immernoch die PID des child an.!?