diff options
author | Andreas Schneider <asn@cryptomilk.org> | 2011-08-09 22:59:17 +0200 |
---|---|---|
committer | Andreas Schneider <asn@cryptomilk.org> | 2011-08-09 23:08:39 +0200 |
commit | cbe8f8b7609270b8921c341a3193f11c6497f6a1 (patch) | |
tree | d345671b0ff97e2adcec625a7cc6bee12f478f5d | |
parent | 8987bc53e067a746fd0596c585f73e7fa74526fe (diff) | |
download | libssh-cbe8f8b7609270b8921c341a3193f11c6497f6a1.tar.gz libssh-cbe8f8b7609270b8921c341a3193f11c6497f6a1.tar.xz libssh-cbe8f8b7609270b8921c341a3193f11c6497f6a1.zip |
channels: Handle SSH_AGAIN in channel_open().
(cherry picked from commit 2f878736427f5fd846f8ebb0c834e6a65bf8a638)
-rw-r--r-- | src/channels.c | 13 | ||||
-rw-r--r-- | src/session.c | 8 |
2 files changed, 9 insertions, 12 deletions
diff --git a/src/channels.c b/src/channels.c index b6ad996e..89acaa8e 100644 --- a/src/channels.c +++ b/src/channels.c @@ -292,11 +292,14 @@ static int channel_open(ssh_channel channel, const char *type_c, int window, /* Todo: fix this into a correct loop */ /* wait until channel is opened by server */ while(channel->state == SSH_CHANNEL_STATE_NOT_OPEN){ - ssh_handle_packets(session, -2); - if (session->session_state == SSH_SESSION_STATE_ERROR) { - err = SSH_ERROR; - break; - } + err = ssh_handle_packets(session, -2); + if (err != SSH_OK) { + break; + } + if (session->session_state == SSH_SESSION_STATE_ERROR) { + err = SSH_ERROR; + break; + } } if(channel->state == SSH_CHANNEL_STATE_OPEN) err=SSH_OK; diff --git a/src/session.c b/src/session.c index c9ea57a8..2975c1a4 100644 --- a/src/session.c +++ b/src/session.c @@ -464,18 +464,12 @@ int ssh_handle_packets(ssh_session session, int timeout) { tm = ssh_make_milliseconds(session->timeout, session->timeout_usec); } rc = ssh_poll_ctx_dopoll(ctx, tm); - if (rc == SSH_ERROR) { session->session_state = SSH_SESSION_STATE_ERROR; } leave_function(); - - if (session->session_state == SSH_SESSION_STATE_ERROR) { - return SSH_ERROR; - } - - return SSH_OK; + return rc; } /** |