Thread Länge bei recv: Wie lange kann die Länge bei recv sein ? (7 answers)
Opened by weismat at 2003-09-07 12:20

steffenw
 2003-09-08 00:58
#84747 #84747
User since
2003-08-15
692 Artikel
BenutzerIn
[Homepage] [default_avatar]
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.
Code: (dl )
1
2
3
4
5
6
$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};

View full thread Länge bei recv: Wie lange kann die Länge bei recv sein ?