Клиент-сервер - системный вызов select () изменяет значение времени ожидания - PullRequest
0 голосов
/ 21 января 2020

Ниже код написан на стороне КЛИЕНТА, здесь клиент читает ответ от Сервера, используя Select (). Я заметил, что select () вводит некоторую задержку в ответе. Пройдя через гугл для этого, find select () может изменить значение тайм-аута, решить - переинициализировать timeval перед вызовом select (его уже есть в моем коде).

Но все же наблюдается введенная задержка с помощью select (). воспроизвел то же самое в следующих двух случаях.

Случай 1: - READ_TIMEOUT = 60 секунд MAX_RETRIES = 1

Случай 2: - READ_TIMEOUT = 10 секунд MAX_RETRIES = 6

Хотя общее время истекло (60 * 1 = 6 * 10 = 60) одинаково для обоих случаев, но все же Клиент получает больше ошибок: «ОШИБКА:« ВРЕМЯ МАКСИМАЛЬНОЙ ПОПЫТКИ достигнуто »в case1 , чем case2 .

Было бы здорово, если бы вы могли дать намек или направление для размышлений.

read_response( int sock )
{

              Loop:
              {
                       FD_ZERO( &read_set ) ;
                       FD_SET( sock, &read_set ) ;
                       timeout.tv_sec = READ_TIMEOUT; 
                       timeout.tv_usec = 0 ;

                       rc = select( sock + 1, &read_set, NULL, NULL, &timeout ) ;

                      if ( rc < 0 && errno != EINTR )
                      {
                                      Log Error: select failed errno;
                                      return 1;
                      }
                       else if ( rc == 0 )  /* Timeout */
                       {
                                      if ( ++timeoutcount < MAX_RETRIES) 
                                                     continue;

                                      Log (ERROR: "TIMEOUT MAX Retry reached");
                                      Return -1;
                       }
                       if ( !FD_ISSET( sock, &read_set ) )
                        {
                                      Log Error : Read timeout;
                                      Return -1;
                        }
                       Loop:
                       {
                                      //If things are good, it read the response
                                      read(sock, buffer + pos,  );
                       }
            }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...