libcurl - держать соединение открытым для загрузки нескольких файлов (FTP) - PullRequest
11 голосов
/ 20 июня 2011

Мне нужно загрузить каталоги на FTP-сервер в моем приложении и планировать используйте libcurl . Я вижу, что нет прямого способа загрузить каталог со многими файлы, что имеет смысл для меня. Я не мог, однако, найти упоминание о загружать много файлов.

Если я получу список файлов в каталоге, я могу загрузить их в цикле. Опция CURLOPT_FTP_CREATE_MISSING_DIRS может помочь с подкаталогами, но если бы я хотел знать также, если я упускаю суть здесь или это будет иметь любой серьезный недостаток.

Основной вопрос: как я могу держать соединение "открытым"? Переподключение на каждый файл, вероятно, будет означать дополнительные нежелательные издержки.

В идеале, я бы хотел продолжать использовать простой интерфейс. Но если другой интерфейс обеспечивает лучшую поддержку в этом случае, я буду использовать его.

CURLcode ret;
CURL *handle = curl_easy_init();

/* Connect to FTP server using     *
 * the given username and password */

for ({each file}) {

    curl_easy_setopt(handle, ..., ...);
    ...
    ret = curl_easy_perform(handle);
    /* Analyse return code */
    curl_easy_reset(handle);
}

/* Disconnect from server */
curl_easy_clenup(handle);

1 Ответ

13 голосов
/ 20 июня 2011

Просто повторно используйте тот же дескриптор, и он будет сохранять соединение максимально открытым, а последующие передачи будут повторно использовать предыдущий.

Когда вы используете простой интерфейс, кеш соединений находится в пределах легкой ручки. Если вместо этого вы используете мультиинтерфейс, кеш соединений будет храниться в мульти дескрипторе и будет использоваться всеми легкими дескрипторами, которые используются в одном мультиреклере.

...