aboutsummaryrefslogtreecommitdiff
path: root/src/channels.c
diff options
context:
space:
mode:
authorAndreas Schneider <asn@cryptomilk.org>2011-08-09 22:59:17 +0200
committerAndreas Schneider <asn@cryptomilk.org>2011-08-09 22:59:17 +0200
commit2f878736427f5fd846f8ebb0c834e6a65bf8a638 (patch)
treeacb26e0e8d281ff5089209f3166cc3d2c3eb355f /src/channels.c
parent6c45d6dc0196a2846313b588c0e05996813ab3f8 (diff)
downloadlibssh-2f878736427f5fd846f8ebb0c834e6a65bf8a638.tar.gz
libssh-2f878736427f5fd846f8ebb0c834e6a65bf8a638.tar.xz
libssh-2f878736427f5fd846f8ebb0c834e6a65bf8a638.zip
channels: Handle SSH_AGAIN in channel_open().
Diffstat (limited to 'src/channels.c')
-rw-r--r--src/channels.c13
1 files changed, 8 insertions, 5 deletions
diff --git a/src/channels.c b/src/channels.c
index fb57be03..6a616ade 100644
--- a/src/channels.c
+++ b/src/channels.c
@@ -296,11 +296,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;