Irgendwie hat die Zahl, die bei recv übergeben wird, etwas mit der Blocklänge zu tun und größere als 4096 habe ich noch nicht in Beispielen gesehen. Es ist auch so, wenn Du 4096 Bytes erwartest und das Paket die Anzahl nicht enthält, daß dann recv mit der kleineren Länge zurückkommt und erst beim nächsten recv die restilchen Bytes gelesen werden können. Also kann der Code nur eine Schleife bis zum Erreichen der Gesamtlänge oder Verbindungsende sein.
$remote->recv($length, 10);
while ($length)
{ $remote->recv(my $message_block, $length > 4096 ? 4096 : $length);
$message .= $message_block;
$length -= length $message_block;
}
Dein Code klappt eigentlich nur, weil Du in der for-Schleife immer nur ein Byte erwartest und 0 erhaltene Byte einem Verbindungsabbruch entsprechen, nur eine while-Schleife kann die Bytes einsammeln, bis die Länge voll ist.
Nur mal so nebenbei:
Wenn ich
for ($i=0;$i<$length;$i++) lese, denke ich immer, daß das kein Perl ist. Perl ist
foreach my $i (0..$length-1), oder ?
$SIG{USER} = sub {love 'Perl' or die};