【问题标题】:libcurl — Keep Connection "open" to Upload Multiple Files (FTP)libcurl — 保持连接“打开”以上传多个文件 (FTP)
【发布时间】:2011-09-18 17:24:49
【问题描述】:

我需要将目录上传到我的应用程序上的 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);

【问题讨论】:

    标签: c curl ftp libcurl


    【解决方案1】:

    只需重复使用同一个句柄,它会尽可能保持连接打开,后续传输将重复使用前一个。

    当您使用简易接口时,连接缓存保存在简易句柄中。如果您改为使用多接口,则连接缓存将保存在多句柄中,并将在同一多句柄中使用的所有简单句柄之间共享。

    【讨论】:

    • 非常感谢 Stenberg 先生,很荣幸收到您的回复!如果我可以要求进一步澄清,在这种情况下是否需要curl_easy_reset()?手册页说实时连接保留在句柄中,但是手动(在循环中)重新设置选项就足够了吗?
    • 您可以采用任何您认为最适合您的代码的方式。重置不会终止连接缓存。如果您愿意,可以手动重新设置选项。
    • 再次感谢,并祝贺出色的工作。最美好的祝愿
    • @DanielStenberg :我一直在寻找这个答案。如果关闭一个简单的句柄会终止连接并为每个简单的句柄创建新的连接,我担心多界面。
    • @DanielStenberg :cURL 文档拥有我想要的一切。 When an easy interface is added to a multi handle, it will use a shared connection cache owned by the multi handle. Removing and adding new easy handles will not affect the pool of connections or the ability to do connection re-use. 在 curl_multi_add_handle() 中找到这个 :-)
    猜你喜欢
    • 2019-11-09
    • 1970-01-01
    • 1970-01-01
    • 2015-04-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多