diff --git a/.travis.yml b/.travis.yml
index 2fe0f3b..df39a9b 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -2,7 +2,7 @@ sudo: required
dist: trusty
language: java
jdk:
- - oraclejdk8
+ - openjdk11
addons:
# Fix OpenJDK builds
# https://github.com/travis-ci/travis-ci/issues/5227
diff --git a/pom.xml b/pom.xml
index c6754b6..3739c33 100644
--- a/pom.xml
+++ b/pom.xml
@@ -45,8 +45,8 @@
UTF-8
- 1.8
- 1.8
+ 11
+ 11
@@ -100,7 +100,7 @@
org.mockito
mockito-core
- 2.7.22
+ 3.6.28
test
diff --git a/src/main/java/org/graylog2/syslog4j/SyslogConstants.java b/src/main/java/org/graylog2/syslog4j/SyslogConstants.java
index 3ded474..1ceaab2 100644
--- a/src/main/java/org/graylog2/syslog4j/SyslogConstants.java
+++ b/src/main/java/org/graylog2/syslog4j/SyslogConstants.java
@@ -69,6 +69,12 @@ public interface SyslogConstants extends Serializable {
public static final boolean TCP_SO_LINGER_DEFAULT = true;
public static final int TCP_SO_LINGER_SECONDS_DEFAULT = 1;
public static final boolean TCP_KEEP_ALIVE_DEFAULT = true;
+ public static final boolean TCP_KEEP_ALIVE_COUNT_DEFAULT = true;
+ public static final int TCP_KEEP_ALIVE_COUNT_VALUE_DEFAULT = 8;
+ public static final boolean TCP_KEEP_ALIVE_INTERVAL_DEFAULT = true;
+ public static final int TCP_KEEP_ALIVE_INTERVAL_SECONDS_DEFAULT = 75;
+ public static final boolean TCP_KEEP_ALIVE_IDLE_DEFAULT = true;
+ public static final int TCP_KEEP_ALIVE_IDLE_SECONDS_DEFAULT = 1200;
public static final boolean TCP_REUSE_ADDRESS_DEFAULT = true;
public static final boolean TCP_SET_BUFFER_SIZE_DEFAULT = true;
public static final int TCP_FRESH_CONNECTION_INTERVAL_DEFAULT = -1;
diff --git a/src/main/java/org/graylog2/syslog4j/impl/net/tcp/TCPNetSyslogConfig.java b/src/main/java/org/graylog2/syslog4j/impl/net/tcp/TCPNetSyslogConfig.java
index df881c9..3867342 100644
--- a/src/main/java/org/graylog2/syslog4j/impl/net/tcp/TCPNetSyslogConfig.java
+++ b/src/main/java/org/graylog2/syslog4j/impl/net/tcp/TCPNetSyslogConfig.java
@@ -39,6 +39,13 @@ public class TCPNetSyslogConfig extends AbstractNetSyslogConfig implements TCPNe
protected boolean keepAlive = TCP_KEEP_ALIVE_DEFAULT;
+ protected boolean keepAliveCount = TCP_KEEP_ALIVE_COUNT_DEFAULT;
+ protected int keepAliveCountValue = TCP_KEEP_ALIVE_COUNT_VALUE_DEFAULT;
+ protected boolean keepAliveInterval = TCP_KEEP_ALIVE_INTERVAL_DEFAULT;
+ protected int keepAliveIntervalSeconds = TCP_KEEP_ALIVE_INTERVAL_SECONDS_DEFAULT;
+ protected boolean keepAliveIdle = TCP_KEEP_ALIVE_IDLE_DEFAULT;
+ protected int keepAliveIdleSeconds = TCP_KEEP_ALIVE_IDLE_SECONDS_DEFAULT;
+
protected boolean reuseAddress = TCP_REUSE_ADDRESS_DEFAULT;
protected boolean setBufferSize = TCP_SET_BUFFER_SIZE_DEFAULT;
@@ -137,6 +144,51 @@ public void setKeepAlive(boolean keepAlive) {
this.keepAlive = keepAlive;
}
+ @Override
+ public boolean isKeepAliveCount() {
+ return this.keepAliveCount;
+ }
+
+ @Override
+ public void setKeepAliveCountValue(int countValue) {
+ this.keepAliveCountValue = countValue;
+ }
+
+ @Override
+ public int getKeepAliveCountValue() {
+ return this.keepAliveCountValue;
+ }
+
+ @Override
+ public boolean isKeepAliveInterval() {
+ return this.keepAliveInterval;
+ }
+
+ @Override
+ public void setKeepAliveIntervalSeconds(int intervalSeconds) {
+ this.keepAliveIntervalSeconds = intervalSeconds;
+ }
+
+ @Override
+ public int getKeepAliveIntervalSeconds() {
+ return this.keepAliveIntervalSeconds;
+ }
+
+ @Override
+ public boolean isKeepAliveIdle() {
+ return this.keepAliveIdle;
+ }
+
+ @Override
+ public void setKeepAliveIdleSeconds(int idleSeconds) {
+ this.keepAliveIdleSeconds = idleSeconds;
+ }
+
+ @Override
+ public int getKeepAliveIdleSeconds() {
+ return this.keepAliveIdleSeconds;
+ }
+
public boolean isReuseAddress() {
return this.reuseAddress;
}
diff --git a/src/main/java/org/graylog2/syslog4j/impl/net/tcp/TCPNetSyslogConfigIF.java b/src/main/java/org/graylog2/syslog4j/impl/net/tcp/TCPNetSyslogConfigIF.java
index 5e760ab..43cb31d 100644
--- a/src/main/java/org/graylog2/syslog4j/impl/net/tcp/TCPNetSyslogConfigIF.java
+++ b/src/main/java/org/graylog2/syslog4j/impl/net/tcp/TCPNetSyslogConfigIF.java
@@ -34,6 +34,24 @@ public interface TCPNetSyslogConfigIF extends AbstractNetSyslogConfigIF {
public void setKeepAlive(boolean keepAlive);
+ public boolean isKeepAliveCount();
+
+ public void setKeepAliveCountValue(int countValue);
+
+ public int getKeepAliveCountValue();
+
+ public boolean isKeepAliveInterval();
+
+ public void setKeepAliveIntervalSeconds(int intervalSeconds);
+
+ public int getKeepAliveIntervalSeconds();
+
+ public boolean isKeepAliveIdle();
+
+ public void setKeepAliveIdleSeconds(int idleSeconds);
+
+ public int getKeepAliveIdleSeconds();
+
public boolean isReuseAddress();
public void setReuseAddress(boolean reuseAddress);
diff --git a/src/main/java/org/graylog2/syslog4j/impl/net/tcp/TCPNetSyslogWriter.java b/src/main/java/org/graylog2/syslog4j/impl/net/tcp/TCPNetSyslogWriter.java
index 3e4a535..79d67e3 100644
--- a/src/main/java/org/graylog2/syslog4j/impl/net/tcp/TCPNetSyslogWriter.java
+++ b/src/main/java/org/graylog2/syslog4j/impl/net/tcp/TCPNetSyslogWriter.java
@@ -7,6 +7,7 @@
import javax.net.SocketFactory;
+import jdk.net.ExtendedSocketOptions;
import org.graylog2.syslog4j.SyslogConstants;
import org.graylog2.syslog4j.SyslogRuntimeException;
import org.graylog2.syslog4j.impl.AbstractSyslog;
@@ -67,6 +68,18 @@ protected Socket createSocket(InetAddress hostAddress, int port, boolean keepali
newSocket.setKeepAlive(keepalive);
}
+ if (this.tcpNetSyslogConfig.isKeepAliveCount()) {
+ newSocket.setOption(ExtendedSocketOptions.TCP_KEEPCOUNT, tcpNetSyslogConfig.getKeepAliveCountValue());
+ }
+
+ if (this.tcpNetSyslogConfig.isKeepAliveInterval()) {
+ newSocket.setOption(ExtendedSocketOptions.TCP_KEEPINTERVAL,tcpNetSyslogConfig.getKeepAliveIntervalSeconds() );
+ }
+
+ if (this.tcpNetSyslogConfig.isKeepAliveIdle()) {
+ newSocket.setOption(ExtendedSocketOptions.TCP_KEEPIDLE,tcpNetSyslogConfig.getKeepAliveIdleSeconds() );
+ }
+
if (this.tcpNetSyslogConfig.isReuseAddress()) {
newSocket.setReuseAddress(true);
}