【问题标题】:libssh's sftp_new: Out of memorylibssh 的 sftp_new:内存不足
【发布时间】:2021-08-02 13:33:49
【问题描述】:

我想使用 libssh 0.9.5 从 SFTP 服务器连接并异步读取文件。但是这个简单的工作示例:

//https://api.libssh.org/master/libssh_tutor_sftp.html#sftp_read
#include <libssh/libssh.h>
#include <libssh/sftp.h>
#include <iostream>

using namespace std;

int main(){
    ssh_session sshs = ssh_new();
    if(sshs == NULL){
        cerr << "Error allocating SSH session: " << ssh_get_error(sshs) << endl;
        return SSH_ERROR;
    }
    ssh_options_set(sshs, SSH_OPTIONS_HOST, "reach");
    ssh_options_set(sshs, SSH_OPTIONS_USER, "reach");

    //SSH is working fine
    int rc = ssh_connect(sshs);
    if(rc != SSH_OK){
        cerr << "Error connecting to localhost: " << ssh_get_error(sshs) << endl;
        return SSH_ERROR;
    }

    //Now we talking....
    sftp_session sftps = sftp_new(sshs);
    if(sftps == NULL){
        cerr << "Error allocating SFTP session: " << ssh_get_error(sshs) << endl;
        return SSH_ERROR;
    }

    sftp_free(sftps);
    ssh_disconnect(sshs);
    ssh_free(sshs);
    return 0;
}

产生Error allocating SFTP session: sftp_new: Out of memory。 我可以用其他软件连接到reach@reach上的SFTP服务器。

【问题讨论】:

    标签: c++ libssh


    【解决方案1】:

    这就是https://bugs.libssh.org/T127的bug

    如果“reach”同时解析为 IPv6 地址和 IPv4 地址,sftp 会尝试仅连接到第一个地址。如果失败,则中止连接。

    如果您尝试连接到您提供的主机名解析到的 IPv4 地址,它将成功。但是它解析的 IPv6 地址会产生 EHOSTUNREACH 错误。

    所有 sftp 错误都会被 Out Of Memory 错误覆盖。

    【讨论】:

    • ssh_options_set(sshs, SSH_OPTIONS_HOST, "192.168.2.15"); 仍然不起作用。
    猜你喜欢
    • 1970-01-01
    • 2014-10-15
    • 2011-05-21
    • 1970-01-01
    • 2015-03-06
    • 1970-01-01
    • 2021-12-20
    • 2021-10-29
    • 1970-01-01
    相关资源
    最近更新 更多