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:
@@ -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;
|
||||||
|
|||||||
@@ -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;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
Reference in New Issue
Block a user