我正在使用最近的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应用程序的一部分,因此需要付出一些努力才能删除。
发布于 2011-11-14 09:40:06
我注意到我安装了两个版本的libssh2 : 1.2.2。在/usr和1.3.0中(来自git存储库)在/usr/local中。我没有对特定版本的任何附件,所以我删除了最近的版本(旧版本是对机器上其他软件的依赖)。
为了适应旧的界面,我不得不做两到三个小的改变,但至少最初问题中描述的问题消失了。
https://stackoverflow.com/questions/8105089
复制相似问题