1
1

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.
Этот коммит содержится в:
Oliver Stöneberg 2011-05-16 06:49:38 -07:00 коммит произвёл Andreas Schneider
родитель 4e153aed8a
Коммит 671a982739
3 изменённых файлов: 9 добавлений и 8 удалений

Просмотреть файл

@ -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;