aws / aws/aws-sdk-cpp

Failed setting TCP keep-alive interval with error code: 12018

Open
#2,563 5 comments 0 reactions 0 assignees View on GitHub
feature-request p3
Dominant language
C++
Stars
2.2k
Forks
1.2k
Avg merge
3d 14h
Merged PRs (30d)
12

Description

### Describe the bug

Creating an instance of `Aws::Client::ClientConfiguration` causes `Failed setting TCP keep-alive interval with error code: 12018` warning message when `region` is fetched from the EC2 Instance Metadata Service. There is an option to get rid of the warnings by setting `enableTcpKeepAlive` to false once the object is created, but the problem is that the warnings are generated in the constructor and when executing the constructor `enableTcpKeepAlive` is always set to true. This causes problems on Windows, since the tcp keep alive setting on WinHttp is not available.

### Expected Behavior

No warnings `Failed setting TCP keep-alive interval with error code: 12018` should be generated. It should be possible to set `enableTcpKeepAlive` to false when creating the object (eg. pass `enableTcpKeepAlive` as a constructor parameter).

### Current Behavior

Warning messages `Failed setting TCP keep-alive interval with error code: 12018` are generated when `Aws::Client::ClientConfiguration` is created.

### Reproduction Steps

```
int main()
{
Aws::SDKOptions options;
options.loggingOptions.logLevel = Aws::Utils::Logging::LogLevel::Warn;

Aws::InitAPI(options);

Aws::Client::ClientConfiguration config;
config.enableTcpKeepAlive = false;

ShutdownAPI(options);
}
```
Note: You need to make sure that the region will be fetched from the EC2 Instance Metadata Service.

### Possible Solution

Since the tcp keep alive setting on WinHttp is not available, we can just set `enableTcpKeepAlive` to false by default on Windows:
```
@@ -45,7 +45,11 @@ void setLegacyClientConfigurationParameters(ClientConfiguration& clientConfig)
clientConfig.httpRequestTimeoutMs = 0;
clientConfig.requestTimeoutMs = 3000;
clientConfig.connectTimeoutMs = 1000;
+ #ifdef _WIN32
+ clientConfig.enableTcpKeepAlive = false;
+ #else
clientConfig.enableTcpKeepAlive = true;
+ #endif // _WIN32
clientConfig.tcpKeepAliveIntervalMs = 30000;
clientConfig.lowSpeedLimit = 1;
clientConfig.proxyScheme = Aws::Http::Scheme::HTTP;
```

Another possibility is to pass `enableTcpKeepAlive` as a `Aws::Client::ClientConfiguration` constructor parameter.

### Additional Information/Context

_No response_

### AWS CPP SDK version used

1.9.234

### Compiler and Version used

Microsoft Visual C++ Compiler 16.11.32228.343

### Operating System and version

Windows Server 2022 20348.1607

Contributor guide

Open the contributing guide

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.