首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >诊断libssh2 SFTP阻塞呼叫

诊断libssh2 SFTP阻塞呼叫
EN

Stack Overflow用户
提问于 2011-11-12 14:33:01
回答 1查看 1K关注 0票数 0

我正在使用最近的libssh2 Git树来执行一些SFTP工作。我用的是非阻塞界面。

我成功地建立了到SFTP服务器的连接、登录和传输文件。

但是,我遇到了一个问题,对libssh2_sftp_write(sftp_handle, ptr, nread)平原的调用挂起。这个总是在237115172字节的数据传输之后发生

虽然有效载荷比这个数字小,但一切都进行得很好。

我要传送多个文件。对于整个事务,我使用一个SSH会话(和一个套接字)。有人能提出解决这个问题的方向吗?神奇的数字237115172是一个暗示,但它对我来说还没有任何意义。我做错什么了?

这是代码,直接从libssh2示例中提取出来:

代码语言:javascript
复制
do 
{
    nread = fread(m_buffer, 1, sizeof(m_buffer), local);
    //
    // EOF
    //
    if (nread <= 0) 
        break;
    ptr = m_buffer;
    total += nread;
    do 
    {
        //
        // FIXME: this hangs sometimes... why?!
        //

        /* write data in a loop until we block */
        while 
        (
            (rc = libssh2_sftp_write(sftp_handle, ptr, nread)) 
            == 
            LIBSSH2_ERROR_EAGAIN
        ) 
        {
            if (m_aborted)
                goto cleanup;
            waitsocket(m_sock, m_session);
        }
        if (rc < 0)
            break;
        ptr += rc;
        nread -= rc;
        m_uploadedBytes += rc;
        emit totalUploadChanged(100*(float)m_uploadedBytes/m_totalBytes);
    } 
    while (nread);
} 
while (rc > 0);

我可以发布完整的源代码,但它很长,而且由于它是QT应用程序的一部分,因此需要付出一些努力才能删除。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-11-14 09:40:06

我注意到我安装了两个版本的libssh2 : 1.2.2。在/usr和1.3.0中(来自git存储库)在/usr/local中。我没有对特定版本的任何附件,所以我删除了最近的版本(旧版本是对机器上其他软件的依赖)。

为了适应旧的界面,我不得不做两到三个小的改变,但至少最初问题中描述的问题消失了。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8105089

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档