为什么 Net::SSH2::File 只允许写入 32500 字节?
我有一台 Redhat 5.5 Linux 机器,使用 Perl Net::SSH2 来 sftp 文件。看来,一旦打开文件句柄进行写入,每次调用 $fh->write($buffer) 时,我只能写入最大缓冲区长度 32500 字节。在将文件写入 Net::SSH2::File 文件句柄之前,我必须将文件读取限制为 30*1024 字节。我不应该能够写入更大的缓冲区吗?我复制的文件大小约为 800k。我所说的缓冲区是写入块的大小。我可以不断地写这个块大小。
I have a Redhat 5.5 Linux machine using Perl Net::SSH2 to sftp a file. It appears that once the filehandle is opened for writing, I can only write a maximum buffer length of 32500 bytes for each call to $fh->write($buffer). I've had to limit my file read to 30*1024 bytes before writing it to the Net::SSH2::File filehandle. Shouldn't I be able to write a larger buffer? The filesize I am copying is about 800k. The buffer I am talking about is the size of the write chunk. I can continually write this chunk size.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
这显然是 Net::SSH2 中的硬编码限制。请参阅此处:
http://www.libssh2.org/邮件/libssh2-devel-archive-2010-06/0104.shtml
It's apparently a hard-coded limit in Net::SSH2. See here:
http://www.libssh2.org/mail/libssh2-devel-archive-2010-06/0104.shtml
大多数 SSH 服务器将它们可以处理的数据包大小限制为 32Kb 左右,因此客户端也会这样做以实现互操作性。
您可以使用 Net::SFTP::Foreign,这不会没有这个限制(只要内存可用,它的缓冲区就会增长以容纳任何长度的数据)并且它可以通过 Net_SSH2 后端在 Net::SSH2 之上运行Net::SFTP::Foreign::后端: :Net_SSH2 或仅使用 OpenSSH 二进制客户端。
Most SSH servers limit the size of the packets they can handle to some size around 32Kb and so clients do the same for interoperability.
You can use Net::SFTP::Foreign, that doesn't have that limitation (its buffers will grow to accommodate data of any length as far as memory is available) and it can run on top of Net::SSH2 via the Net_SSH2 backend Net::SFTP::Foreign::Backend::Net_SSH2 or just use the OpenSSH binary client.