Fehler beim Lesen von TcpStream

8

Ich versuche, das Haskell IRC-Bot-Tutorial in Rust zu implementieren und habe Schwierigkeiten beim Lesen, was der Server mir danach schickt verbinden. Was scheint zu passieren ist, dass ich verbinde, lesen Sie ~ 5 kb vom Server, und dann etwa 240 Sekunden später wird alles auf einmal abgeladen, anstatt Zeile für Zeile gelesen werden, wenn ein Ping-Timeout die Verbindung schließt (was schließlich passieren sollte, da ich noch keine Ping-Pong-Funktion habe um zu antworten). Folgendes habe ich bisher:

%Vor%

Aber wenn ich die Schleife ein bisschen ändere, indem ich ein Array anstelle eines Strings verwende, bekomme ich sofort die Ausgabe, die ich erwarte:

%Vor%

Also meine Schlussfolgerung ist, dass stream.read_to_string(&mut line) irgendwie der Schuldige ist. Weiß jemand, warum das der Fall ist, oder gibt es etwas Offensichtliches, das ich übersehe?

Hinweis: Ich verwende die stabile Version 1.0

Edit: Um genauer zu sein, im ersten Fall erscheint die Ausgabe nach dem Ping-Timeout, worauf folgend gedruckt wird:

%Vor%

Im zweiten Fall, bei dem das Array verwendet wird, erhalte ich fast sofort die richtige Ausgabe:

%Vor%     
Chirico 30.05.2015, 23:00
quelle

1 Antwort

6

Sehen Sie sich die Dokumentation für read_to_string an:

  

Lies alle Bytes bis EOF in dieser Quelle und platziere sie in buf.

(Betonung meiner)

Beachten Sie, dass Sie im ersten Beispiel keine 512 Bytes lesen, 512 Byte Speicherplatz vorbelegen und dann jedes Byte lesen, bis der Socket schließt - 4 Minuten später.

Es klingt so, als ob Sie BufRead::read_line verwenden möchten:

  

Lesen Sie alle Bytes, bis ein Newline-Byte (das 0xA-Byte) erreicht ist, und hängen Sie sie an den bereitgestellten Puffer an.

     

Diese Funktion wird weiterhin Bytes aus dem zugrunde liegenden Stream lesen (und puffern), bis der Newline-Begrenzer (das 0xA-Byte) oder EOF gefunden wird. Sobald gefunden, werden alle Bytes bis einschließlich des Trennzeichens (falls gefunden) an buf angehängt.

    
Shepmaster 31.05.2015, 02:40
quelle

Tags und Links