libssh2 sftp:非阻塞API-API返回LIBSSH2_ERROR_EAGAIN时的未定义行为

时间:2018-12-30 16:28:03

标签: c++ linux sftp libssh2

我在Linux下为我的c ++应用程序使用libssh2库。 使用非阻塞API时,SFTP库函数可以在内部管理用户的未决请求吗?

例如:

LIBSSH2_SFTP_HANDLE *pSftpHandle = libssh2_sftp_open(m_pSftpSession, 
                                                     FILENAME1,      
                                                     LIBSSH2_FXF_WRITE|
                                                     LIBSSH2_FXF_CREAT|
                                                     LIBSSH2_FXF_TRUNC,                                                                       
                                                     LIBSSH2_SFTP_S_IRUSR|
                                                     LIBSSH2_SFTP_S_IWUSR|                                                                                                                             
                                                     LIBSSH2_SFTP_S_IRGRP|
                                                     LIBSSH2_SFTP_S_IROTH);

if (libssh2_session_last_errno(m_pSshSession) == LIBSSH2_ERROR_EAGAIN)
{
           pSftpHandle = libssh2_sftp_open(m_pSftpSession,FILENAME2,                                                                
                                                     LIBSSH2_FXF_WRITE|
                                                     LIBSSH2_FXF_CREAT|
                                                     LIBSSH2_FXF_TRUNC,                                                                       
                                                     LIBSSH2_SFTP_S_IRUSR|
                                                     LIBSSH2_SFTP_S_IWUSR|                                                                                                                             
                                                     LIBSSH2_SFTP_S_IRGRP|
                                                     LIBSSH2_SFTP_S_IROTH);

 }

在上面的示例中,我是否必须等到libssh2_sftp_open()对于FILENAME1成功/失败返回之后,再使用FILENAME2对其进行调用? 我问的原因是因为我在执行上述操作时遇到不确定的行为。 如果我等到libssh2_sftp_open()完成FILENAME1的处理(不返回LIBSSH2_ERROR_EAGAIN),一切都会顺利进行。

谢谢

0 个答案:

没有答案