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)

Reply via email to