Hallo Dirk, sk und steffenw
danke für Eure Hilfe und Informationen. Das mit select hört sich gut an, jedoch scheint es auf Windows nicht zu funktionieren (ich bekomme immer ein leeres Array zurück) oder ich hab es noch nicht verstanden. Auch den Socket auf non-blocking zu stellen, löst nicht mein Schleifenproblem.
Mein jetziger COde sieht so aus
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
use strict;
use Config;
use IO::Socket::INET;
use IO::Select;
my $SocketHandle;
my $buf;
my $binFile = "<e:/test.bin";
my $Status;
my $SelHandle;
my @Readable;
unless (@ARGV == 2) { die "Usage: GetStatus.pl remotehostname port" }
$SocketHandle = IO::Socket::INET->new(PeerAddr => $ARGV[0],
PeerPort => $ARGV[1],
Proto => "tcp",
Timeout => 10,
Type => SOCK_STREAM) or die "cannot connect: $!\n";
$SocketHandle->autoflush(1);
$SocketHandle->blocking(0);
open(FileHandle, $binFile)or die "cannot open file: $!\n";
binmode(FileHandle);
while (read(FileHandle, $buf, 28))
{
$SocketHandle->send($buf);
}
$|=1;
$SelHandle = IO::Select->new($SocketHandle);
while (@Readable = $SelHandle->can_read)
{
$SocketHandle->recv($Status,1);
print($Status);
}
close FileHandle;
close $SocketHandle;
Danke
Reinhard