Schrift
Wiki:Tipp zum Debugging: use Data::Dumper; local $Data::Dumper::Useqq = 1; print Dumper \@var;
[thread]7211[/thread]

Schleifen im server - fork

Leser: 2


<< >> 6 Einträge, 1 Seite
kevin
 2005-08-15 15:29
#57213 #57213
User since
2005-08-10
24 Artikel
BenutzerIn
[default_avatar]
Hallo

Wie kann ich in einem Server - fork, der schon eine Schleife abarbeitet auch noch darauf achten, ob die session zum Client überhaupt noch besteht???

Gruß kevin
kevin
 2005-08-15 15:46
#57214 #57214
User since
2005-08-10
24 Artikel
BenutzerIn
[default_avatar]
Hat sich erledigt, bin von selbst draufgekommen...
[E|B]
 2005-08-15 16:32
#57215 #57215
User since
2003-08-08
2561 Artikel
HausmeisterIn
[Homepage] [default_avatar]
Berichtest du uns auch dein Vorgehen?
Gruß, Erik!

s))91\&\/\^z->sub{}\(\@new\)=>69\&\/\^z->sub{}\(\@new\)=>124\&\/\^z->sub{}\(\@new\)=>);
$_.=qq~66\&\/\^z->sub{}\(\@new\)=>93~;for(@_=split(/\&\/\^z->sub{}\(\@new\)=>/)){print chr;}

It's not a bug, it's a feature! - [CGI-World.de]
kevin
 2005-08-15 16:52
#57216 #57216
User since
2005-08-10
24 Artikel
BenutzerIn
[default_avatar]
Bin noch nicht ganz fertig, aber es müsste mit select funktionieren.
kevin
 2005-08-24 15:13
#57217 #57217
User since
2005-08-10
24 Artikel
BenutzerIn
[default_avatar]
So, hiemal das gesamte Script.
Es soll eine Logdatei überwachen, wenn was reinkommt, es an die angemeldeten Clients übergeben und wenn sich ein Client abmeldet soll es den Prozess des Child killen.

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
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
#!/usr/bin/perl
use strict;
use warnings;
use Config::IniFiles;
use IO::Socket;
use IO::Socket qw(:crlf);
use IO::Select;
use POSIX qw(:sys_wait_h);

my ($Ini, $socket, $session, $child, $ident, @param, $peername, @allow, $tmp, @anrufe, @reverse, $sel, @read, @write, $end, $tt, );
my $port = 2345;
my $quit = 0;

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

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

$Ini = new Config::IniFiles( -file => "/etc/anrufer.conf", -nocase => 1 );
$socket = IO::Socket::INET->new(
Listen => 20,
LocalPort => $port,
Timeout => 60*60,
Reuse => 1) || die "Konnte Socket nicht oeffnen: $!\n";

$sel = new IO::Select($socket);

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

while(!$quit) {
next unless $session = $socket->accept();
$sel->add($session);
print $session->peerhost."\n";
$child = fork();
die "Forking nicht mgoelich: $!\n" unless defined $child;
unless($child) {
$socket->close;
$ident = $session->peerhost;
@param = $Ini->Parameters('Number');
foreach $tmp ( @param ) {
my @array = split /,/, $Ini->val('Number', $tmp);
foreach ( @array ) {
if ( m/^$ident$/ ) {
push @allow, $tmp;
}
}
}
my $test = join "|", @allow;
print $session "abonierte Nummern: @allow$CRLF" if $test;
$peername = gethostbyaddr($session->peeraddr,AF_INET) || $session->peerhost;
print "Verbindung von $peername auf Port $port akzeptiert ($$)\n";
if ( $test ) {
open TAIL, "tail -n200 /var/log/anrufe.log |";
while (<TAIL>) {
if ( m/$test$/ ) {
chomp;
push @anrufe, "$_$CRLF";
}
}
close TAIL;
for ( 1..$Ini->val('Common', 'Anzahl') ) {
push @reverse, pop @anrufe;
}
shift @reverse;
print $session reverse @reverse;
open TL, "tail -fn1 /var/log/anrufe.log |";
$sel->add(\*TL);

$end = 1;
while ( @write = $sel->can_write(1) ) {
foreach $tt (@write) {
if ( $tt == $session ) {
print $session "\b";
$end = 1;
}
}
while ( (@read = $sel->can_read() ) and $end ) {
foreach $tmp ( @read ) {
if ( $tmp == $session ) {
print "".<$tmp>;
$end = 0;
} else {
$_ = <$tmp>;
if ( m/$test$/ ) {
chomp;
print $session "$_ $CRLF";
}
}
}
}
}
close TAIL;
exit 0;

} else {
print $session "\nSie haben keine Nummern aboniert,\nbitte wenden Sie sich an ihren Administrator!\n\nAuf Wiedersehen.\n\n";
exit 0;
}
}
$session->close;
}


Hat vielleicht jemand eine Idee, wie man das noch lösen könnte??

Gruß kevin
sri
 2005-08-24 16:27
#57218 #57218
User since
2004-01-29
828 Artikel
BenutzerIn
[Homepage] [default_avatar]
POE


[edit]Strat: POE verlinkt[/edit]\n\n

<!--EDIT|Strat|1124897037-->
<< >> 6 Einträge, 1 Seite



View all threads created 2005-08-15 15:29.