为什么Net :: SSH2 :: File在写入时只允许32500字节?

时间:2011-09-14 18:19:26

标签: perl sftp

我有一台Redhat 5.5 Linux机器使用Perl Net :: SSH2来sftp文件。看来,一旦打开文件句柄进行写入,每次调用$ fh-> write($ buffer)时,我只能写入32500字节的最大缓冲区长度。在将文件读取到Net :: SSH2 :: File文件句柄之前,我必须将文件读取限制为30 * 1024字节。我不应该写一个更大的缓冲区吗?我正在复制的文件大小约为800k。我所说的缓冲区是写块的大小。我可以不断写出这个块大小。

2 个答案:

答案 0 :(得分:4)

这显然是Net :: SSH2中的硬编码限制。见这里:

http://www.libssh2.org/mail/libssh2-devel-archive-2010-06/0104.shtml

答案 1 :(得分:0)

大多数SSH 服务器将他们可以处理的数据包的大小限制在32Kb左右,因此客户端在互操作性方面也是如此。

您可以使用没有该限制的Net::SFTP::Foreign(只要内存可用,其缓冲区将增长以容纳任何长度的数据)并且它可以在顶部运行Net :: SSH2通过Net_SSH2后端Net::SFTP::Foreign::Backend::Net_SSH2或只使用OpenSSH二进制客户端。