Skip to content

Commit 08b4160

Browse files
committed
Check for keep-alive option support
See apache/httpcomponents-core#544
1 parent 238edf3 commit 08b4160

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
@@ -32,6 +32,7 @@
3232
import java.net.Socket;
3333
import java.net.SocketAddress;
3434
import java.nio.file.Path;
35+
import java.util.Arrays;
3536
import java.util.Collections;
3637
import java.util.List;
3738

@@ -82,6 +83,10 @@
8283
public class DefaultHttpClientConnectionOperator implements HttpClientConnectionOperator {
8384

8485
private static final Logger LOG = LoggerFactory.getLogger(DefaultHttpClientConnectionOperator.class);
86+
@SuppressWarnings("Since15")
87+
private static final boolean SUPPORTS_KEEPALIVE_OPTIONS = Sockets.supportedOptions(Socket.class)
88+
.containsAll(Arrays.asList(ExtendedSocketOptions.TCP_KEEPIDLE, ExtendedSocketOptions.TCP_KEEPINTERVAL,
89+
ExtendedSocketOptions.TCP_KEEPCOUNT));
8590

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

@@ -326,14 +331,16 @@ private static void configureSocket(final Socket socket, final SocketConfig sock
326331
if (linger >= 0) {
327332
socket.setSoLinger(true, linger);
328333
}
329-
if (socketConfig.getTcpKeepIdle() > 0) {
330-
Sockets.setOption(socket, ExtendedSocketOptions.TCP_KEEPIDLE, socketConfig.getTcpKeepIdle());
331-
}
332-
if (socketConfig.getTcpKeepInterval() > 0) {
333-
Sockets.setOption(socket, ExtendedSocketOptions.TCP_KEEPINTERVAL, socketConfig.getTcpKeepInterval());
334-
}
335-
if (socketConfig.getTcpKeepCount() > 0) {
336-
Sockets.setOption(socket, ExtendedSocketOptions.TCP_KEEPCOUNT, socketConfig.getTcpKeepCount());
334+
if (SUPPORTS_KEEPALIVE_OPTIONS) {
335+
if (socketConfig.getTcpKeepIdle() > 0) {
336+
Sockets.setOption(socket, ExtendedSocketOptions.TCP_KEEPIDLE, socketConfig.getTcpKeepIdle());
337+
}
338+
if (socketConfig.getTcpKeepInterval() > 0) {
339+
Sockets.setOption(socket, ExtendedSocketOptions.TCP_KEEPINTERVAL, socketConfig.getTcpKeepInterval());
340+
}
341+
if (socketConfig.getTcpKeepCount() > 0) {
342+
Sockets.setOption(socket, ExtendedSocketOptions.TCP_KEEPCOUNT, socketConfig.getTcpKeepCount());
343+
}
337344
}
338345
}
339346

0 commit comments

Comments
 (0)