From 3ffbd588b304e0a6ec3bd0d502ca9650d23598a1 Mon Sep 17 00:00:00 2001 From: M66B Date: Sat, 13 Feb 2016 14:13:43 +0100 Subject: [PATCH] Native enable socket keep alive after keep alive response --- app/src/main/jni/netguard/tcp.c | 23 +++++++++++++---------- 1 file changed, 13 insertions(+), 10 deletions(-) diff --git a/app/src/main/jni/netguard/tcp.c b/app/src/main/jni/netguard/tcp.c index cd3b0de8..6ba9ec55 100644 --- a/app/src/main/jni/netguard/tcp.c +++ b/app/src/main/jni/netguard/tcp.c @@ -110,15 +110,6 @@ void check_tcp_sessions(const struct arguments *args, int sessions, int maxsessi write_ack(args, t); t->local_seq++; - // Keep alive - int on = 1; - if (setsockopt(t->socket, SOL_SOCKET, SO_KEEPALIVE, &on, sizeof(on))) - log_android(ANDROID_LOG_ERROR, - "%s setsockopt SO_KEEPALIVE error %d: %s", - session, errno, strerror(errno)); - else - log_android(ANDROID_LOG_WARN, "%s enabled keep alive", session); - } else { // Check session timeout @@ -560,9 +551,21 @@ jboolean handle_tcp(const struct arguments *args, log_android(ANDROID_LOG_DEBUG, "%s handling", session); cur->time = time(NULL); - cur->keep_alive = 0; cur->send_window = ntohs(tcphdr->window); + // Enable socket keep alive + if (cur->keep_alive) { + cur->keep_alive = 0; + + int on = 1; + if (setsockopt(cur->socket, SOL_SOCKET, SO_KEEPALIVE, &on, sizeof(on))) + log_android(ANDROID_LOG_ERROR, + "%s setsockopt SO_KEEPALIVE error %d: %s", + session, errno, strerror(errno)); + else + log_android(ANDROID_LOG_WARN, "%s enabled keep alive", session); + } + // Do not change the order of the conditions // Queue data to forward