1
0
mirror of https://git.libssh.org/projects/libssh.git synced 2025-12-02 01:17:52 +03:00

channels: Handle SSH_AGAIN in channel_open().

This commit is contained in:
Andreas Schneider
2011-08-09 22:59:17 +02:00
parent 6c45d6dc01
commit 2f87873642
2 changed files with 9 additions and 12 deletions

View File

@@ -296,11 +296,14 @@ static int channel_open(ssh_channel channel, const char *type_c, int window,
/* Todo: fix this into a correct loop */ /* Todo: fix this into a correct loop */
/* wait until channel is opened by server */ /* wait until channel is opened by server */
while(channel->state == SSH_CHANNEL_STATE_NOT_OPEN){ while(channel->state == SSH_CHANNEL_STATE_NOT_OPEN){
ssh_handle_packets(session, -2); err = ssh_handle_packets(session, -2);
if (session->session_state == SSH_SESSION_STATE_ERROR) { if (err != SSH_OK) {
err = SSH_ERROR; break;
break; }
} if (session->session_state == SSH_SESSION_STATE_ERROR) {
err = SSH_ERROR;
break;
}
} }
if(channel->state == SSH_CHANNEL_STATE_OPEN) if(channel->state == SSH_CHANNEL_STATE_OPEN)
err=SSH_OK; err=SSH_OK;

View File

@@ -464,18 +464,12 @@ int ssh_handle_packets(ssh_session session, int timeout) {
tm = ssh_make_milliseconds(session->timeout, session->timeout_usec); tm = ssh_make_milliseconds(session->timeout, session->timeout_usec);
} }
rc = ssh_poll_ctx_dopoll(ctx, tm); rc = ssh_poll_ctx_dopoll(ctx, tm);
if (rc == SSH_ERROR) { if (rc == SSH_ERROR) {
session->session_state = SSH_SESSION_STATE_ERROR; session->session_state = SSH_SESSION_STATE_ERROR;
} }
leave_function(); leave_function();
return rc;
if (session->session_state == SSH_SESSION_STATE_ERROR) {
return SSH_ERROR;
}
return SSH_OK;
} }
/** /**