Ich zeige Dir mal meinen Code aus einer Bibliothek, die ich geschrieben habe:
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
sub receive {
my($message, $j, $i, $length, %result, $help, $result);
my $self=$_[0];
my $remote=$self->{remote};
if (defined($self->{buffer})) {
debug("read from buffer", "info");
$message=$self->{buffer};
} else {
debug("read from socket", "info");
$i =$remote->recv($help, 4096);
$message=$help;
while (substr($help, length($help)-1) ne "\n") {
$remote->recv($help, 4096);
$message=$message.$help;
debug("Read again from socket");#comment out
}
}
debug("Processing: $message");#comment out
if (length($message)==index($message,"\n")+1) {
debug("one message");
$result=$message;
$self->{buffer}=undef;
}
else {
debug("multiple messages");
$result=substr($message, 0, index($message, "\n"));
$self->{buffer}=substr($message, index($message, "\n")+1);
}
return $result;
}
Ein weiteres Problem ist nämlich, daß Du mit dem Standard Recv maximal 4096 pro Lesen einliest und dann auch mehr als eine Message einlesen kannst.
Auf Wunsch kann ich Dir auch mal eine ganze Bibliothek zukommen lassen.