

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# 在适用于 C\$1\$1 的 AWS SDK 中使用 `Aws::SDKOptions` 的常规配置
<a name="sdkoptions"></a>

[https://docs.aws.amazon.com/sdk-for-cpp/latest/api/aws-cpp-sdk-core/html/struct_aws_1_1_s_d_k_options.html](https://docs.aws.amazon.com/sdk-for-cpp/latest/api/aws-cpp-sdk-core/html/struct_aws_1_1_s_d_k_options.html) 结构包含 SDK 配置选项。`Aws::SDKOptions` 侧重于常规 SDK 配置，而 [`ClientConfiguration`](client-config.md) 结构则侧重于与 AWS 服务通信的配置。

[https://docs.aws.amazon.com/sdk-for-cpp/latest/api/aws-cpp-sdk-core/html/struct_aws_1_1_s_d_k_options.html](https://docs.aws.amazon.com/sdk-for-cpp/latest/api/aws-cpp-sdk-core/html/struct_aws_1_1_s_d_k_options.html) 的实例被传递给 [`Aws::InitAPI` 和 `Aws::ShutdownAPI` 方法](basic-use.md)。应将同一个实例发送给这两个方法。

以下示例演示了一些可用选项。
+ 使用默认记录器开启日志记录

  ```
  Aws::SDKOptions options;
  options.loggingOptions.logLevel = Aws::Utils::Logging::LogLevel::Info;
  Aws::InitAPI(options);
  {
      // make your SDK calls here.
  }
  Aws::ShutdownAPI(options);
  ```
+ 覆盖默认 HTTP 客户端工厂

  ```
  Aws::SDKOptions options;
  options.httpOptions.httpClientFactory_create_fn = [](){
          return Aws::MakeShared<MyCustomHttpClientFactory>(
              "ALLOC_TAG", arg1);
      };
  Aws::InitAPI(options);
  {
      // make your SDK calls here.
  }
  Aws::ShutdownAPI(options);
  ```
**注意**  
 `httpOptions` 采用闭包（也称为匿名函数或 lambda 表达式）而不是 `std::shared_ptr`。每个 SDK 工厂函数都以这种方式运作，因为在工厂分配内存时，内存管理器尚未安装。通过向该方法传递闭包，将在安全的情况下调用内存管理器来执行内存分配。完成此过程的一种简单方法是使用 Lambda 表达式。
+ 使用全局 `SIGPIPE` 处理程序

  如果您使用 curl 和 OpenSSL 构建适用于 C\$1\$1 的 SDK，则必须指定信号处理程序。如果您不使用自己的自定义信号处理程序，请将 `installSigPipeHandler` 设置为 `true`。

  ```
  Aws::SDKOptions options;
  options.httpOptions.installSigPipeHandler = true; 
  Aws::InitAPI(options);
  {
      // make your SDK calls here.
  }
  Aws::ShutdownAPI(options);
  ```

  当 `installSigPipeHandler` 为 `true` 时，适用于 C\$1\$1 的 SDK 会使用忽略 `SIGPIPE` 信号的处理程序。有关 `SIGPIPE` 的更多信息，请参阅 GNU 操作系统网站上的 [Operation Error Signals](https://www.gnu.org/software/libc/manual/html_node/Operation-Error-Signals.html)。有关 curl 处理程序的更多信息，请参阅 curl 网站上的 [CURLOPT\$1NOSIGNAL 说明](https://curl.se/libcurl/c/CURLOPT_NOSIGNAL.html)。

  当远程端关闭连接时，curl 和 OpenSSL 的底层库可以发送一个 `SIGPIPE` 信号来进行通知。这些信号必须由应用程序处理。有关此 curl 功能的更多信息，请参阅 curl 网站上的 [libcurl thread safety](https://curl.se/libcurl/c/threadsafe.html)。此行为不会自动内置到 SDK 中，因为信号处理程序对于每个应用程序来说都是全局的，并且该库是 SDK 的依赖项。