Grösse v. RemoteDatei auf FTP Server via CAsyncSocket::IOCtl



  • Hi,

    ich versuche die Grösse einer Datei herauzufinden, welche vom FTP Server gesendet bekomme.

    Dies klappt auch... ABER nur wenn die Remote Dateien in etwa kleiner als 64kb sind. Teilweise aber auch schon nicht mehr wenn die Files knapp an die 60kb rankommen.
    In diesem Fall kommen immer Werte zurück, die kleiner sind als die Dateigrösse in bytes, und diese Werte sind auch noch bei jedem Versuch wieder anders... Sad

    Wo liegt da die Begrenzung ? Oder muss ich irgendwo einen Timeout erhöhen damit er Zeit hat die Grösse zu zählen ?

    Hier mal das Codestück:

    CAsyncSocket datachannel;
    DWORD lpArgument=0;
    int lpOptionValue;
    int optlen;
    
    // RETR Command gesendet, und 100er Code als Antwort vom Server erhalten           
    
    if((!datachannel.AsyncSelect(0))||(!datachannel.IOCtl(FIONBIO,&lpArgument))) {
       m_retmsg.LoadString(IDS_FTPMSG6);
       return FALSE;
    }
    
       // TODO: +++
       lpOptionValue = 0x100000; // RecvBuffer auf Max 1MB setzen
       optlen = sizeof(lpOptionValue);
       i = datachannel.SetSockOpt(SO_RCVBUF, &lpOptionValue, optlen);
    
       i = datachannel.IOCtl(FIONREAD,&lpArgument);
    

    Ich bedanke mich schonmal für Antworten und hoffe somit auch welche zu kriegen 😃

    Jan



  • verzichte auf den müll mit FIONREAD. das braucht man nicht und ist auch nicht gut.

    und die größe des internen receive-buffers musste auch nicht dran rumfrickeln!



  • Die Kritik war schonmal gut. An dem konstruktiven Teil deines Posts arbeiten wir nochmal...

    Naja habs rausgefunden. Dachte halt man könnte dadurch die Grösse der Datei auf dem Server bestimmen ohne die Datei herunterzuladen. Die daten müssen aber alle an den Socket gesendet werden um die grösse zu ermitteln, somit bringt mir das nichts. Werde die grösse doch aus der Rückgabe des LIST Commands rausfrickeln müssen :-\


Anmelden zum Antworten