Skip to content

Commit 54b6b73

Browse files
committed
Check for keep-alive option support
See apache/httpcomponents-core#544
1 parent 2bd05c7 commit 54b6b73

File tree

1 file changed

+15
-8
lines changed

1 file changed

+15
-8
lines changed

httpclient5/src/main/java/org/apache/hc/client5/http/impl/io/DefaultHttpClientConnectionOperator.java

Lines changed: 15 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@
3333
import java.net.Socket;
3434
import java.net.SocketAddress;
3535
import java.nio.file.Path;
36+
import java.util.Arrays;
3637
import java.util.Collections;
3738
import java.util.List;
3839

@@ -79,6 +80,10 @@
7980
public class DefaultHttpClientConnectionOperator implements HttpClientConnectionOperator {
8081

8182
private static final Logger LOG = LoggerFactory.getLogger(DefaultHttpClientConnectionOperator.class);
83+
@SuppressWarnings("Since15")
84+
private static final boolean SUPPORTS_KEEPALIVE_OPTIONS = Sockets.supportedOptions(Socket.class)
85+
.containsAll(Arrays.asList(ExtendedSocketOptions.TCP_KEEPIDLE, ExtendedSocketOptions.TCP_KEEPINTERVAL,
86+
ExtendedSocketOptions.TCP_KEEPCOUNT));
8287

8388
static final DetachedSocketFactory PLAIN_SOCKET_FACTORY = socksProxy -> socksProxy == null ? new Socket() : new Socket(socksProxy);
8489

@@ -319,14 +324,16 @@ private static void configureSocket(final Socket socket, final SocketConfig sock
319324
if (linger >= 0) {
320325
socket.setSoLinger(true, linger);
321326
}
322-
if (socketConfig.getTcpKeepIdle() > 0) {
323-
Sockets.setOption(socket, ExtendedSocketOptions.TCP_KEEPIDLE, socketConfig.getTcpKeepIdle());
324-
}
325-
if (socketConfig.getTcpKeepInterval() > 0) {
326-
Sockets.setOption(socket, ExtendedSocketOptions.TCP_KEEPINTERVAL, socketConfig.getTcpKeepInterval());
327-
}
328-
if (socketConfig.getTcpKeepCount() > 0) {
329-
Sockets.setOption(socket, ExtendedSocketOptions.TCP_KEEPCOUNT, socketConfig.getTcpKeepCount());
327+
if (SUPPORTS_KEEPALIVE_OPTIONS) {
328+
if (socketConfig.getTcpKeepIdle() > 0) {
329+
Sockets.setOption(socket, ExtendedSocketOptions.TCP_KEEPIDLE, socketConfig.getTcpKeepIdle());
330+
}
331+
if (socketConfig.getTcpKeepInterval() > 0) {
332+
Sockets.setOption(socket, ExtendedSocketOptions.TCP_KEEPINTERVAL, socketConfig.getTcpKeepInterval());
333+
}
334+
if (socketConfig.getTcpKeepCount() > 0) {
335+
Sockets.setOption(socket, ExtendedSocketOptions.TCP_KEEPCOUNT, socketConfig.getTcpKeepCount());
336+
}
330337
}
331338
}
332339

0 commit comments

Comments
 (0)