diff --git a/src/main/java/software/amazon/awssdk/crt/io/SocketOptions.java b/src/main/java/software/amazon/awssdk/crt/io/SocketOptions.java index 3a8db3e18..f588f5e0d 100644 --- a/src/main/java/software/amazon/awssdk/crt/io/SocketOptions.java +++ b/src/main/java/software/amazon/awssdk/crt/io/SocketOptions.java @@ -88,6 +88,11 @@ int getValue() { */ public int keepAliveTimeoutSecs = 0; + /** + * If true, enables periodic transmits of keepalive messages for detecting a disconnected peer. + */ + public boolean keepAlive = false; + /** * Creates a new set of socket options */ @@ -103,7 +108,8 @@ public long getNativeHandle() { type.getValue(), connectTimeoutMs, keepAliveIntervalSecs, - keepAliveTimeoutSecs + keepAliveTimeoutSecs, + keepAlive )); } return super.getNativeHandle(); @@ -129,7 +135,7 @@ protected void releaseNativeHandle() { /******************************************************************************* * native methods ******************************************************************************/ - private static native long socketOptionsNew(int domain, int type, int connectTimeoutMs, int keepAliveIntervalSecs, int keepAliveTimeoutSecs); + private static native long socketOptionsNew(int domain, int type, int connectTimeoutMs, int keepAliveIntervalSecs, int keepAliveTimeoutSecs, boolean keepAlive); private static native void socketOptionsDestroy(long elg); }; diff --git a/src/native/socket_options.c b/src/native/socket_options.c index 4b6fbf2b7..67a6031c3 100644 --- a/src/native/socket_options.c +++ b/src/native/socket_options.c @@ -30,7 +30,8 @@ jlong JNICALL Java_software_amazon_awssdk_crt_io_SocketOptions_socketOptionsNew( jint type, jint connect_timeout_ms, jint keep_alive_interval_secs, - jint keep_alive_timeout_secs) { + jint keep_alive_timeout_secs, + jboolean keep_alive) { (void)jni_class; aws_cache_jni_ids(env); @@ -44,6 +45,7 @@ jlong JNICALL Java_software_amazon_awssdk_crt_io_SocketOptions_socketOptionsNew( options->connect_timeout_ms = connect_timeout_ms; options->keep_alive_interval_sec = (short)keep_alive_interval_secs; options->keep_alive_timeout_sec = (short)keep_alive_timeout_secs; + options->keepalive = keep_alive; return (jlong)options; }