X
Hallo
Ich bin kein Experte was FTP anbelangt, aber mit WinInet habe ich auch schon mal gearbeitet.
Mir ist aufgefallen, dass aktive und passive Verbindungen je nach Server/Client-Konfiguration manchmal seltsame Fehler liefern können, besonders wenn mehrere Anfragen hintereinander an den Server gesendet werden (Request 1 funktioniert, Request 2 schlägt mit Timeout fehl). Generell würde ich empfehlen InternetConnect mit INTERNET_FLAG_PASSIVE aufzurufen, weil die Server dafür meist konfiguriert sind, die Clients aber oft nicht ACTIVE sein können (Firewall/Router).
Wird ein HINTERNET für einige Zeit nicht benutzt dürfte der eingesetzte Socket geschlossen werden und die nächste Anforderung schlägt fehl. Habe mir daher damals immer eine Routine geschrieben, die bei einem Fehlschlag die Verbindung einmal neu aufbaut und es nochmals versucht.
Beachte auch, dass WinInet bei FTP immer nur eine Aktion gleichzeitig ausführen kann. Bei Rekursionen muss die letzte Aktion abgeschlossen sein (InternetCloseHandle())!
Ansonsten solltest du (wie bei jeder WinAPI ) darauf achten alle deine Handles zu schließen, speziell wenn durch einen Fehler/Exception ein Codeblock verlassen wird (daran bin ich schon ein paar mal hängen geblieben ).
cu
PS: Ich hoffe dein FTP-Verzeichnis hat NIE mehr als 100 Unterelemente ... (std::vector kann ein mächtiger Verbündeter sein)