Thread Signal Handler: Signal Handler (7 answers)
Opened by ahnungsloser at 2004-01-21 10:33

ahnungsloser
 2004-01-21 10:33
#79337 #79337
User since
2003-09-03
80 Artikel
BenutzerIn
[default_avatar]
Hi,

ich bins wieder mal, der absolut Ahnungslose. Ich hab da so ein Problem, habe ein Grundgerüst, für einen Telnet Server gebastelt. nun kommt es vor, dass der aufrufende Client, einfach das Fenster via STRG+x© beendet, bzw. das Fenster mit dem Obligatorischen (X) Fensterschliesser schliesst und mein Serverchen bleibt hängen und akzeptiert keine anbindungen mehr. Daher suche ich eine möglichkeit, diese Signale zu unterdrücken, bzw. zu ignorieren, hier mal der code schnibbel:

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
106
107
108
109
110
111
112
113
use Socket;
use Carp;
$| = 1;

my $port = 23;
my $proto = getprotobyname('tcp');
my $lf = "\x0a";
my $cr = "\x0d";

sub logmsg { print STDOUT "$0 $$: @_ um ", scalar localtime, "\n" }

socket(Server, PF_INET, SOCK_STREAM, $proto) or die "socket: $!";
setsockopt(Server, SOL_SOCKET, SO_REUSEADDR, pack("l", 1)) or die "options: $!";

bind(Server, sockaddr_in($port, INADDR_ANY)) or die "bind: $!";
listen(Server, SOMAXCONN) or die "liste $1";

logmsg "Server an Port $port gestartet";

my $paddr;

$SIG{CHLD} = \&REAPER;

while ($paddr = accept(Client, Server)) {

my($port, $iaddr) = sockaddr_in($paddr);
my $name = gethostbyaddr($iaddr, AF_INET);
my $cc;

logmsg "Verbindung von $name [", inet_ntoa($iaddr), "] an Port $port";



select Client;
$| = 1;
print "password: ";
read Client, $cc, 3;
close Client unless $cc eq 'abg';

while ( $cc ne 'x' ) {
&menu;
read Client, $cc, 1;

if ( $cc eq '1' ) { &funktion1; read Client, $anykey, 1; }
if ( $cc eq '2' ) { &funktion2; read Client, $anykey, 1; }
if ( $cc eq '3' ) { &funktion3 }
if ( $cc eq 'x' ) { &funktionx; read Client, $anykey, 1; }

}



}

sub menu {
print "\n" x 50;
print "\rWillkommen zu Appels Server-checker!\n\r";
print "--------------------------------------\n\r";
print "\n" x 8;
print "\rFunktion waehlen:";
print "\t[1] Server Connectivty der ABG Frankfurt Holding\n\n\r";
print "\t\t\t[2] angemeldeten Benutzer zeigen\n\n\r";
print "\t\t\t[3] verbundene Netzlaufwerke zeigen\n\n\r";
print "\t\t\t[x] Programm beenden\r";
print "\n" x 8;
}

sub funktion1 {
open HOSTS, "listeserver.txt";

@hostlist = <HOSTS>;


foreach $host ( @hostlist ) {

@ping = `ping -l 1 -n 1 $host`;

if ($ping[3] =~ /Antwort/) {
chomp ($host);
print Client "$host Server ist erreichbar!\n\r";
}

else {
 chomp ($host);
 print Client "$host Server konnte nicht erreicht werden!\a\n\r";


}
close HOSTS;
}
}

sub funktion2 {
print Client "das ist funktion2";

}

sub funktion3 {

}

sub funktionx {
print Client "\n\r";
print Client "\t";
print Client "#" x 16;
print Client "\n\r";
print Client "\tBye, Bye Baby!!!\n\r";
print Client "\n\r";
print Client "\t";
print Client "#" x 16;
close Client;
exit;
}


Das ganze soll auf Windows 2000 laufen und ich benutze die ActiveState Distro.

Bearbeitet von Crian: code-Tags ergänzt\n\n

<!--EDIT|Crian|1074680093-->

View full thread Signal Handler: Signal Handler