The usual error procedure with libssh2_sftp_* functions is to first
call libssh2_session_last_error to make sure the error wasn't
something SSH related like a broken connection.  This function returns
an error message in its second parameter.

Assuming the was no SSH, this function will return
LIBSSH2_ERROR_SFTP_PROTOCOL in which case you can call
libssh2_sftp_last_error to get more detail.  This returns an error
code but no error message so I have my own function,
GetSftpErrorMessage that just maps these codes to strings.  Here is my
error handling function in case it helps to see code:

/**
 * Retrieves a string description of the last error reported by libssh2.
 *
 * In the case that the last SSH error is an SFTP error it returns the SFTP
 * error message in preference.
 */
CString GetLastErrorMessage(const CSession& session)
{
        int nErr; PSTR pszErr; int cchErr;

        nErr = libssh2_session_last_error(session, &pszErr, &cchErr, false);
        if (nErr == LIBSSH2_ERROR_SFTP_PROTOCOL)
        {
                ULONG uErr = libssh2_sftp_last_error(session);
                return GetSftpErrorMessage(uErr);
        }
        else // A non-SFTP error occurred
                return CString(pszErr);
}

However, I have been having problems with libssh2_sftp_open.  For
instance it returns LIBSSH2_FX_NO_SUCH_FILE when the file is locked or
already exists and I passed the CREAT flag.  I assume this is
OpenSSH's fault and that libssh2 just returns whatever the server
sends it.

HTH

Alex
--
http://swish.sourceforge.net

2009/7/24 royconejo <[email protected]>:
>
> well, libssh2_sftp_open() returns NULL whenever it fails, but how could I
> discern if it was because of the ?
_______________________________________________
libssh2-devel http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel

Reply via email to