Thread FTP Socket flush (3 answers)
Opened by rosti at 2025-07-30 07:21

rosti
 2025-07-30 07:21
#197172 #197172
User since
2011-03-19
3656 Artikel
BenutzerIn
[Homepage]
user image
Gemäß Protokoll bin ich an der Stelle, wo das Socket für den Datentransfer offen und dazu bereit ist, Daten auf den FTP-Server zu schreiben:

Quote
227 Entering Passive Mode (185,146,238,137,232,167).
250 CWD command successful
150 Opening BINARY mode data connection for dbf.bin


Also schreibe ich jetzt die Daten in das Socket mit dem Namen $data:

Code (perl): (dl )
1
2
3
4
5
6
7
8
9
        
        my $data = $self->{DATA}; # Socket für den Datentransfer
        my $len = 0;
        while( my $x = read($fh, my $buffer, 2048) ){
                print "#";
                $data->print($buffer);
                $len += $x;
        }
        $data->flush;


Auf dem Server jedoch muss ich feststellen, daß da einige Bytes fehlern, also der Buffer nicht komplett geleert wurde. $data->flush funktioniert nur teilweise.

Notiere ich $data->getc, wird der Buffer geleert und alle Bytes werden geschrieben, jedoch blockiert dann das Socket. Wie gehts richtig?

Bitte mal um Hinweise, MfG

PS: Wenn ich mit sleep 1 eine Sekunde warte, kommen alle Daten an, aber das scheint mir unsauber.
Last edited: 2025-07-30 07:28:37 +0200 (CEST)
http://blog.rolfrost.de/

The art of steam.

View full thread FTP Socket flush