Thread IO::Socket Problem ... (16 answers)
Opened by weismat at 2005-07-04 01:56

weismat
 2005-07-04 17:43
#37650 #37650
User since
2003-08-18
142 Artikel
BenutzerIn
[default_avatar]
Ich zeige Dir mal meinen Code aus einer Bibliothek, die ich geschrieben habe:
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
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.

View full thread IO::Socket Problem ...