libssh2 sftp: неблокирующий API - неопределенное поведение, когда API возвращает LIBSSH2_ERROR_EAGAIN - PullRequest
0 голосов
/ 30 декабря 2018

Я использую библиотеку libssh2 для своего приложения c ++ под Linux.При использовании неблокирующего 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), все будет работать гладко.

Спасибо

...