aws-sdk-cpp
aws-sdk-cpp copied to clipboard
Failed setting TCP keep-alive interval with error code: 12018
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