Ниже код написан на стороне КЛИЕНТА, здесь клиент читает ответ от Сервера, используя 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, );
}
}
}