Guidance regarding libssh2_sftp_write()

Reid Thompson reid.thompson at
Wed Sep 7 17:47:56 CEST 2022

I am looking for some guidance, I am having an issue related to
libssh2_sftp_write write ahead. I am attempting to sftp write multiple
files.  Small files appear to be being transferred fine, large file
writes are incomplete.
Regarding the write ahead documentation below, how does one determine
when the complete file has been written before invoking
libssh2_sftp_write() again?  Does libssh2 provide any mechanism or
reference for how to determine this?

Starting in libssh2 version 1.2.8, the default behavior of libssh2 is
to create several smaller outgoing packets for all data you pass to
this function and it will return a positive number as soon as the first
packet is acknowledged from the server.

This has the effect that sometimes more data has been sent off but
isn't acked yet when this function returns, and when this function is
subsequently called again to write more data, libssh2 will immediately
figure out that the data is already received remotely.

In most normal situation this should not cause any problems, but it
should be noted that if you've once called libssh2_sftp_write() with
data and it returns short, you MUST still assume that the rest of the
data might've been cached so you need to make sure you don't alter that
data and think that the version you have in your next function invoke
will be detected or used.

The reason for this funny behavior is that SFTP can only send 32K data
in each packet and it gets all packets acked individually. This means
we cannot use a simple serial approach if we want to reach high
performance even on high latency connections. And we want that.

Reid Thompson
Senior Software Engineer
Crunchy Data, Inc.

reid.thompson at

More information about the libssh2-devel mailing list