php ssh2 sftp fread,诊断libssh2 SFTP阻塞调用

我使用最新的libssh2 Git树来执行一些SFTP工作。我正在使用非阻塞接口。

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

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

虽然有效载荷小于这个数字,事情进展得很好。

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

这是直接出自libssh2示例的代码:

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应用程序的一部分,所以需要一点努力才能完成。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值