aws-sdk-cpp icon indicating copy to clipboard operation
aws-sdk-cpp copied to clipboard

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

Open azuraw10 opened this issue 2 years ago • 5 comments

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

azuraw10 avatar Jul 04 '23 07:07 azuraw10