connect: Set timeout on connect
This also fixes error handling in ssh_poll_ctx_dopoll() and ssh_handle_packets(), so it won't loop forever on an actual timeout.
Этот коммит содержится в:
родитель
4e153aed8a
Коммит
671a982739
10
src/client.c
10
src/client.c
@ -673,8 +673,6 @@ int ssh_connect(ssh_session session) {
|
||||
} else {
|
||||
ret=ssh_socket_connect(session->socket, session->host, session->port,
|
||||
session->bindaddr);
|
||||
|
||||
/*, session->timeout * 1000 + session->timeout_usec); */
|
||||
}
|
||||
if (ret == SSH_ERROR) {
|
||||
leave_function();
|
||||
@ -687,8 +685,12 @@ int ssh_connect(ssh_session session) {
|
||||
ssh_log(session,SSH_LOG_PROTOCOL,"Socket connecting, now waiting for the callbacks to work");
|
||||
pending:
|
||||
session->pending_call_state=SSH_PENDING_CALL_CONNECT;
|
||||
if(ssh_is_blocking(session))
|
||||
ssh_handle_packets_termination(session,-1,ssh_connect_termination,session);
|
||||
if(ssh_is_blocking(session)) {
|
||||
int timeout = session->timeout * 1000 + session->timeout_usec;
|
||||
if (timeout <= 0)
|
||||
timeout = -1;
|
||||
ssh_handle_packets_termination(session,timeout,ssh_connect_termination,session);
|
||||
}
|
||||
else
|
||||
ssh_handle_packets_termination(session,0,ssh_connect_termination, session);
|
||||
ssh_log(session,SSH_LOG_PACKET,"ssh_connect: Actual state : %d",session->session_state);
|
||||
|
@ -645,10 +645,8 @@ int ssh_poll_ctx_dopoll(ssh_poll_ctx ctx, int timeout) {
|
||||
return 0;
|
||||
|
||||
rc = ssh_poll(ctx->pollfds, ctx->polls_used, timeout);
|
||||
if(rc < 0)
|
||||
rc=SSH_ERROR;
|
||||
if(rc <= 0)
|
||||
return rc;
|
||||
return SSH_ERROR;
|
||||
used = ctx->polls_used;
|
||||
for (i = 0; i < used && rc > 0; ) {
|
||||
if (!ctx->pollfds[i].revents) {
|
||||
|
@ -429,7 +429,8 @@ int ssh_handle_packets(ssh_session session, int timeout) {
|
||||
if(spoll_in != spoll_out)
|
||||
ssh_poll_ctx_add(ctx,spoll_out);
|
||||
}
|
||||
ssh_poll_ctx_dopoll(ctx,timeout);
|
||||
if( ssh_poll_ctx_dopoll(ctx,timeout) )
|
||||
session->session_state = SSH_SESSION_STATE_ERROR;
|
||||
leave_function();
|
||||
if (session->session_state != SSH_SESSION_STATE_ERROR)
|
||||
return SSH_OK;
|
||||
|
Загрузка…
Ссылка в новой задаче
Block a user