[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Detect disconnection when upload file.


Hi everyone. I'm using the library to upload files to a remote server using the SFTP module but sometimes I have network problems like disconnections or the remote server closes the connection.

My problem is that the library doesn't report the error code correctly or I'm not using it correctly.

The first thing I do is initialize the ssh & sftp sessions then I try to open a file on the remote server using sft_open:

if (!(file = sftp_open(m_session->sftp, remotePath.c_str(), oFlags, S_IRWXU)))
     throw SysErr::CSysException(sftp_get_error(m_session->sftp),CXP_ECAT_SFTP_ERROR,ssh_get_error(m_session->ssh));

This works fine, but sometimes when the network fails or the remote server closes the connection, I can't get the correct error code, but I can get the error message.

For example, some errors I get are:

sftp.error ecode: 0 message: Socket error: Connection reset by peer
sftp.error ecode: 4 message: Socket error: Connection reset by peer
sftp.error ecode: 4 message: Socket error: connected


As you can see, the ssh_get_error(m_session->ssh) function works fine and reports the correct error message, but I don't know if it's correct to use sftp_get_error(m_session->sftp) to get the error code or maybe I should always use the ssh_get_error_code function to get the error code.

As I have seen, 0 is no error (SSH_FX_OK: no error) and 4 is general failure (SSH_FX_FAILURE: generic failure), I would expect to receive an error like:

SSH_FX_NO_CONNECTION: no connection has been set up
SSH_FX_CONNECTION_LOST: there was a connection, but we lost it

I'm using multithreading on linux with the C++ thread library and each thread has its own instance of the SFTP class I've created. This actually works fine but after some time of use I have the network issues mentioned and I am unable to detect disconnections and retry a new connection.

So my question is what is the correct way to know when a disconnection occurs using an error code and not analyzing the error message to find the disconnection or reset by the peer?

Best regards,
John.

Archive administrator: postmaster@lists.cynapses.org