This is an automated email from the ASF dual-hosted git repository. amichair pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/aries-rsa.git
commit 91d2ad863263f006df18a29a156123c32ac8a4b8 Author: Amichai Rothman <[email protected]> AuthorDate: Mon Mar 30 00:47:09 2026 +0300 Add socket timeout to TcpServer --- .../main/java/org/apache/aries/rsa/provider/tcp/TcpEndpoint.java | 6 ++++++ .../main/java/org/apache/aries/rsa/provider/tcp/TcpProvider.java | 3 ++- .../src/main/java/org/apache/aries/rsa/provider/tcp/TcpServer.java | 6 +++++- 3 files changed, 13 insertions(+), 2 deletions(-) diff --git a/provider/tcp/src/main/java/org/apache/aries/rsa/provider/tcp/TcpEndpoint.java b/provider/tcp/src/main/java/org/apache/aries/rsa/provider/tcp/TcpEndpoint.java index 19147c71..04a37cc8 100644 --- a/provider/tcp/src/main/java/org/apache/aries/rsa/provider/tcp/TcpEndpoint.java +++ b/provider/tcp/src/main/java/org/apache/aries/rsa/provider/tcp/TcpEndpoint.java @@ -37,6 +37,7 @@ public class TcpEndpoint implements Endpoint { private String bindAddress; private int port; private int numThreads; + private int timeout; private Consumer<TcpEndpoint> closeCallback; private EndpointDescription epd; @@ -51,6 +52,7 @@ public class TcpEndpoint implements Endpoint { hostname = config.getHostname(); bindAddress = config.getBindAddress(); numThreads = config.getNumThreads(); + timeout = config.getTimeoutMillis(); updateEndpointDescription(effectiveProperties); } @@ -91,6 +93,10 @@ public class TcpEndpoint implements Endpoint { return numThreads; } + public int getTimeout() { + return timeout; + } + @Override public EndpointDescription description() { return this.epd; diff --git a/provider/tcp/src/main/java/org/apache/aries/rsa/provider/tcp/TcpProvider.java b/provider/tcp/src/main/java/org/apache/aries/rsa/provider/tcp/TcpProvider.java index 15d22ea4..1af6f742 100644 --- a/provider/tcp/src/main/java/org/apache/aries/rsa/provider/tcp/TcpProvider.java +++ b/provider/tcp/src/main/java/org/apache/aries/rsa/provider/tcp/TcpProvider.java @@ -160,7 +160,8 @@ public class TcpProvider implements DistributionProvider { int port = endpoint.getPort(); TcpServer server = servers.get(port); if (server == null || port == 0) { - server = new TcpServer(serverSocketFactory, endpoint.getBindAddress(), port, endpoint.getNumThreads()); + server = new TcpServer(serverSocketFactory, endpoint.getBindAddress(), port, + endpoint.getNumThreads(), endpoint.getTimeout()); port = server.getPort(); // get the real port endpoint.setPort(port); servers.put(port, server); diff --git a/provider/tcp/src/main/java/org/apache/aries/rsa/provider/tcp/TcpServer.java b/provider/tcp/src/main/java/org/apache/aries/rsa/provider/tcp/TcpServer.java index 2fe4a31c..de6f5c69 100644 --- a/provider/tcp/src/main/java/org/apache/aries/rsa/provider/tcp/TcpServer.java +++ b/provider/tcp/src/main/java/org/apache/aries/rsa/provider/tcp/TcpServer.java @@ -51,10 +51,12 @@ public class TcpServer implements Closeable, Runnable { private static final Logger LOG = LoggerFactory.getLogger(TcpServer.class); private ServerSocket serverSocket; private Map<String, MethodInvoker> invokers = new ConcurrentHashMap<>(); + private int timeout; private volatile boolean running; private ThreadPoolExecutor executor; - public TcpServer(ServerSocketFactory serverSocketFactory, String bindAddress, int port, int numThreads) { + public TcpServer(ServerSocketFactory serverSocketFactory, String bindAddress, + int port, int numThreads, int timeout) { String addressStr; try { InetSocketAddress address = bindAddress == null || bindAddress.isEmpty() @@ -68,6 +70,7 @@ public class TcpServer implements Closeable, Runnable { } catch (IOException e) { throw new RuntimeException(e); } + this.timeout = timeout; this.running = true; numThreads++; // plus one for server socket accepting thread AtomicInteger counter = new AtomicInteger(); @@ -121,6 +124,7 @@ public class TcpServer implements Closeable, Runnable { ObjectOutputStream out = new BasicObjectOutputStream(socket.getOutputStream()); BasicObjectInputStream in = new BasicObjectInputStream(socket.getInputStream())) { socket.setTcpNoDelay(true); + sock.setSoTimeout(timeout); String endpointId = in.readUTF(); MethodInvoker invoker = invokers.get(endpointId); if (invoker == null)
