How should my libssh2 program detect when the data upload failed because the destination partition ran out of space?
I have a program that uses libssh2 to upload a 152MB file to a partition on a remote machine. In general it
works quite well.
The problem I ran into today involves the scenario when there isn't enough drive-space free on the remote
machine to hold the entire 152MB file. What I would expect to have happen in this case is for
libssh2_channel_write() to return an error-code at some point to indicate the failure, but the behavior
I observe instead is that libssh2_channel_write() keeps on behaving normally (i.e. returning positive
values or -1/LIBSSH2_ERROR_EGAIN, since I'm using non-blocking I/O), as if the file transfer was
I'd like to have my program's GUI indicate than an error occurred when this happens -- is there some
particular way for me to find out when a file upload has failed due to lack of space (or for any other reason)?
For what it's worth, my file transfers use the following sequence of calls (all with the appropriate error
checking of the calls' return values, which I've omitted here for clarity);
_uploadFileChannel = libssh2_scp_send(_session, filePath, permBits, numBytes);
libssh2_channel_write(_uploadFileChannel, (const char *) firstToSend, numBytesLeft); // called
many times, of course
Btw, just as a sanity check, I ran the built-in scp utility on my Mac to upload a large file to the machine with
the full partition:
jeremy-friesners-mac-pro-3:Downloads jaf$ scp
dmitri-6.0.0-2014-05-16-1051-r14027-1-Beta.dmitriUniversalFirmware 100% 152MB 19.0MB/s 00:08
scp: /mnt/user//dmitri-6.0.0-2014-05-16-1051-r14027-1-Beta.dmitriUniversalFirmware: No space
left on device
I note that scp did detect the error, but not until *after* it had already uploaded all 152MB to the server.
That seems odd to me, since the destination (/mnt/user) was already completely full, I would expect the
error to be reported and the uploaded aborted at the beginning of the transfer rather than at the end.
Otherwise, where are all those bytes of data being placed during the upload?