From f5385bc8b3b571c48783a0fb3d08f5892a0c0fcf Mon Sep 17 00:00:00 2001
From: Matthew Swift <matthew.swift@forgerock.com>
Date: Fri, 28 Feb 2014 08:54:30 +0000
Subject: [PATCH] Additional fix for OPENDJ-1197: API is lacking functionality to specify TCP connect timeout
---
opendj-sdk/opendj-grizzly/src/main/java/org/forgerock/opendj/grizzly/GrizzlyUtils.java | 43 ++++++++++++++++++++++++++++---------------
1 files changed, 28 insertions(+), 15 deletions(-)
diff --git a/opendj-sdk/opendj-grizzly/src/main/java/org/forgerock/opendj/grizzly/GrizzlyUtils.java b/opendj-sdk/opendj-grizzly/src/main/java/org/forgerock/opendj/grizzly/GrizzlyUtils.java
index b05f2e9..28b2485 100644
--- a/opendj-sdk/opendj-grizzly/src/main/java/org/forgerock/opendj/grizzly/GrizzlyUtils.java
+++ b/opendj-sdk/opendj-grizzly/src/main/java/org/forgerock/opendj/grizzly/GrizzlyUtils.java
@@ -25,9 +25,8 @@
*/
package org.forgerock.opendj.grizzly;
-import java.io.IOException;
-import java.net.SocketOption;
-import java.net.StandardSocketOptions;
+import java.net.Socket;
+import java.net.SocketException;
import java.nio.channels.SocketChannel;
import org.forgerock.i18n.slf4j.LocalizedLogger;
@@ -196,19 +195,33 @@
// Configure socket options.
final SocketChannel channel = (SocketChannel) ((TCPNIOConnection) connection).getChannel();
- setSocketOption(channel, StandardSocketOptions.TCP_NODELAY, tcpNoDelay, logger);
- setSocketOption(channel, StandardSocketOptions.SO_KEEPALIVE, keepAlive, logger);
- setSocketOption(channel, StandardSocketOptions.SO_REUSEADDR, reuseAddress, logger);
- setSocketOption(channel, StandardSocketOptions.SO_LINGER, linger, logger);
- }
-
- private static <T> void setSocketOption(final SocketChannel channel,
- final SocketOption<T> option, final T value, final LocalizedLogger logger) {
+ final Socket socket = channel.socket();
try {
- channel.setOption(option, value);
- } catch (final IOException e) {
- logger.traceException(e, "Unable to set " + option.name()
- + " to %d on client connection", value);
+ socket.setTcpNoDelay(tcpNoDelay);
+ } catch (final SocketException e) {
+ logger.traceException(e, "Unable to set TCP_NODELAY to %d on client connection",
+ tcpNoDelay);
+ }
+ try {
+ socket.setKeepAlive(keepAlive);
+ } catch (final SocketException e) {
+ logger.traceException(e, "Unable to set SO_KEEPALIVE to %d on client connection",
+ keepAlive);
+ }
+ try {
+ socket.setReuseAddress(reuseAddress);
+ } catch (final SocketException e) {
+ logger.traceException(e, "Unable to set SO_REUSEADDR to %d on client connection",
+ reuseAddress);
+ }
+ try {
+ if (linger < 0) {
+ socket.setSoLinger(false, 0);
+ } else {
+ socket.setSoLinger(true, linger);
+ }
+ } catch (final SocketException e) {
+ logger.traceException(e, "Unable to set SO_LINGER to %d on client connection", linger);
}
}
--
Gitblit v1.10.0