Логика подсчета: введен счетчик err_packet_count. Он инкрементируется только один раз за попытку (за один req_idx), даже если в ответе пришло несколько байт ошибок. Это корректно считает именно количество пакетов, а не общее количество байт ошибок.
Финальное условие: переменная is_error теперь вычисляется как (!cycle_connected) || (err_packet_count >= ERR_PACKET_THRESHOLD). Это элегантно закрывает оба ваших требования (отсутствие связи = ошибка, наличие ошибок в N пакетах = ошибка).