[BACK]Return to clientloop.c CVS log [TXT][DIR] Up to [local] / src / usr.bin / ssh

Diff for /src/usr.bin/ssh/clientloop.c between version 1.344 and 1.345

version 1.344, 2020/04/24 02:19:40 version 1.345, 2020/07/03 05:09:06
Line 155 
Line 155 
 static int need_rekeying;       /* Set to non-zero if rekeying is requested. */  static int need_rekeying;       /* Set to non-zero if rekeying is requested. */
 static int session_closed;      /* In SSH2: login session closed. */  static int session_closed;      /* In SSH2: login session closed. */
 static u_int x11_refuse_time;   /* If >0, refuse x11 opens after this time. */  static u_int x11_refuse_time;   /* If >0, refuse x11 opens after this time. */
   static time_t server_alive_time;        /* Time to do server_alive_check */
   
 static void client_init_dispatch(struct ssh *ssh);  static void client_init_dispatch(struct ssh *ssh);
 int     session_ident = -1;  int     session_ident = -1;
Line 460 
Line 461 
 }  }
   
 static void  static void
   schedule_server_alive_check(void)
   {
           if (options.server_alive_interval > 0)
                   server_alive_time = monotime() + options.server_alive_interval;
   }
   
   static void
 server_alive_check(struct ssh *ssh)  server_alive_check(struct ssh *ssh)
 {  {
         int r;          int r;
Line 475 
Line 483 
                 fatal("%s: send packet: %s", __func__, ssh_err(r));                  fatal("%s: send packet: %s", __func__, ssh_err(r));
         /* Insert an empty placeholder to maintain ordering */          /* Insert an empty placeholder to maintain ordering */
         client_register_global_confirm(NULL, NULL);          client_register_global_confirm(NULL, NULL);
           schedule_server_alive_check();
 }  }
   
 /*  /*
Line 488 
Line 497 
 {  {
         struct timeval tv, *tvp;          struct timeval tv, *tvp;
         int timeout_secs;          int timeout_secs;
         time_t minwait_secs = 0, server_alive_time = 0, now = monotime();          time_t minwait_secs = 0, now = monotime();
         int r, ret;          int r, ret;
   
         /* Add any selections by the channel mechanism. */          /* Add any selections by the channel mechanism. */
Line 517 
Line 526 
          */           */
   
         timeout_secs = INT_MAX; /* we use INT_MAX to mean no timeout */          timeout_secs = INT_MAX; /* we use INT_MAX to mean no timeout */
         if (options.server_alive_interval > 0) {          if (options.server_alive_interval > 0)
                 timeout_secs = options.server_alive_interval;                  timeout_secs = MAXIMUM(server_alive_time - now, 0);
                 server_alive_time = now + options.server_alive_interval;  
         }  
         if (options.rekey_interval > 0 && !rekeying)          if (options.rekey_interval > 0 && !rekeying)
                 timeout_secs = MINIMUM(timeout_secs,                  timeout_secs = MINIMUM(timeout_secs,
                     ssh_packet_get_rekey_timeout(ssh));                      ssh_packet_get_rekey_timeout(ssh));
Line 550 
Line 557 
                  */                   */
                 memset(*readsetp, 0, *nallocp);                  memset(*readsetp, 0, *nallocp);
                 memset(*writesetp, 0, *nallocp);                  memset(*writesetp, 0, *nallocp);
   
                 if (errno == EINTR)                  if (errno == EINTR)
                         return;                          return;
                 /* Note: we might still have data in the buffers. */                  /* Note: we might still have data in the buffers. */
Line 558 
Line 564 
                     "select: %s\r\n", strerror(errno))) != 0)                      "select: %s\r\n", strerror(errno))) != 0)
                         fatal("%s: buffer error: %s", __func__, ssh_err(r));                          fatal("%s: buffer error: %s", __func__, ssh_err(r));
                 quit_pending = 1;                  quit_pending = 1;
         } else if (ret == 0) {          } else if (options.server_alive_interval > 0 && !FD_ISSET(connection_in,
                *readsetp) && monotime() >= server_alive_time)
                 /*                  /*
                  * Timeout.  Could have been either keepalive or rekeying.                   * ServerAlive check is needed. We can't rely on the select
                  * Keepalive we check here, rekeying is checked in clientloop.                   * timing out since traffic on the client side such as port
                    * forwards can keep waking it up.
                  */                   */
                 if (server_alive_time != 0 && server_alive_time <= monotime())                  server_alive_check(ssh);
                         server_alive_check(ssh);  
         }  
   
 }  }
   
 static void  static void
Line 606 
Line 611 
          * the packet subsystem.           * the packet subsystem.
          */           */
         if (FD_ISSET(connection_in, readset)) {          if (FD_ISSET(connection_in, readset)) {
                   schedule_server_alive_check();
                 /* Read as much as possible. */                  /* Read as much as possible. */
                 len = read(connection_in, buf, sizeof(buf));                  len = read(connection_in, buf, sizeof(buf));
                 if (len == 0) {                  if (len == 0) {
Line 1305 
Line 1311 
                 channel_register_cleanup(ssh, session_ident,                  channel_register_cleanup(ssh, session_ident,
                     client_channel_closed, 0);                      client_channel_closed, 0);
         }          }
   
           schedule_server_alive_check();
   
         /* Main loop of the client for the interactive session mode. */          /* Main loop of the client for the interactive session mode. */
         while (!quit_pending) {          while (!quit_pending) {

Legend:
Removed from v.1.344  
changed lines
  Added in v.1.345