diff --git a/libssh/src/channels.c b/libssh/src/channels.c index 6e9b2eb0..902e04b0 100644 --- a/libssh/src/channels.c +++ b/libssh/src/channels.c @@ -314,7 +314,7 @@ static int channel_open(ssh_channel channel, const char *type_c, int window, pending: /* wait until channel is opened by server */ err = ssh_handle_packets_termination(session, SSH_TIMEOUT_USER, ssh_channel_open_termination, channel); - if (err != SSH_OK || session->session_state == SSH_SESSION_STATE_ERROR) + if (session->session_state == SSH_SESSION_STATE_ERROR) err = SSH_ERROR; end: if(channel->state == SSH_CHANNEL_STATE_OPEN) diff --git a/libssh/src/session.c b/libssh/src/session.c index 4e713948..fe5d897c 100644 --- a/libssh/src/session.c +++ b/libssh/src/session.c @@ -537,8 +537,10 @@ int ssh_handle_packets_termination(ssh_session session, int timeout, ret = ssh_handle_packets(session, tm); if(ret == SSH_ERROR) break; - if(ssh_timeout_elapsed(&ts,timeout)) + if(ssh_timeout_elapsed(&ts,timeout)) { + ret = fct(user) ? SSH_OK : SSH_AGAIN; break; + } tm = ssh_timeout_update(&ts, timeout); } return ret;