Leser: 1
![]() |
![]() |
9 Einträge, 1 Seite |
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
my $SOCK;
sub main_connection {
my $text = shift;#prompt-msg
sleep(30) unless $FST;#provide serverflooding
$FST = 0;
print "$text\n";
$SOCK = shake_hands();
login();
#use select to have a non-blocking socket
my $sock = new IO::Select( $SOCK );
main_loop($sock);
} #sub main_connection
sub main_loop {
my $sock = shift;
my $died = 0;#check flag
while (1) {
#get data from socket, if there some
while ((my @ready = $sock->can_read(240))) {
for my $fh (@ready) {#checkout readable fhs
if($fh == $SOCK) {
my $input;
unless(sysread($SOCK,$input,2048)) { $died = 1 };
last if $died;
if($input) {
ping_check();
#in some cases we've more than one cmd in a line
#so we've to split them by \n, cause server seperates by \n
my @cmds = split /\n/, $input;
for my $line (@cmds) {
open_log() unless check_log("logs/$logfile");
start($line);
}
} else {
print "unknow socketerror...\n";#syswrite returns 1, but we haven't some input?
}
last;
}
}
last if $died;
}
last if $died;
ping_check() or last;
print "Nichts passiert!\n";
}
$sock = main_connection('Socketerror, trying to reconnect..');
main_loop($sock);
} #main_loop()
sub shake_hands {
my $host = 'www.example.com';
my $port = '0000';
#open socket to chatserver
my $socket = IO::Socket::INET->new(
PeerAddr => $host,
PeerPort => $port,
proto => 'tcp',
type => 'SOCK_STREAM',
Timeout => 20);
main_connection("No Network! Relogin..") unless $socket;
return $socket;
} #sub shake_hands
![]() |
![]() |
9 Einträge, 1 Seite |