This is an automated email from the ASF dual-hosted git repository.

gnodet pushed a commit to branch fix-serversocket-reuseaddress
in repository https://gitbox.apache.org/repos/asf/camel.git

commit 60e43842cc35c984ffe81b71c777f97010cfc965
Author: Guillaume Nodet <[email protected]>
AuthorDate: Thu Mar 19 12:58:20 2026 +0100

    Fix ServerSocket port finding to use setReuseAddress(true)
    
    Using new ServerSocket(0) to find a free port and then closing it
    creates a race condition where another process can grab the port.
    Fix by using setReuseAddress(true) before binding, which is the same
    pattern used by AvailablePortFinder.
    
    Co-Authored-By: Claude Opus 4.6 <[email protected]>
---
 .../server/core/integ5/ServerAnnotationProcessor.java         | 11 ++++++-----
 .../server/core/integ5/ServerAnnotationProcessor.java         | 11 ++++++-----
 .../org/apache/camel/component/salesforce/PubSubApiTest.java  |  7 ++-----
 .../camel/test/infra/kafka/services/ConfluentContainer.java   |  4 +++-
 .../camel/test/infra/kafka/services/StrimziContainer.java     |  4 +++-
 5 files changed, 20 insertions(+), 17 deletions(-)

diff --git 
a/components/camel-ldap/src/test/java/org/apache/directory/server/core/integ5/ServerAnnotationProcessor.java
 
b/components/camel-ldap/src/test/java/org/apache/directory/server/core/integ5/ServerAnnotationProcessor.java
index a3a7279948a8..016d38122adb 100644
--- 
a/components/camel-ldap/src/test/java/org/apache/directory/server/core/integ5/ServerAnnotationProcessor.java
+++ 
b/components/camel-ldap/src/test/java/org/apache/directory/server/core/integ5/ServerAnnotationProcessor.java
@@ -19,6 +19,7 @@ package org.apache.directory.server.core.integ5;
 import java.io.IOException;
 import java.lang.annotation.Annotation;
 import java.lang.reflect.Method;
+import java.net.InetSocketAddress;
 import java.net.ServerSocket;
 import java.util.ArrayList;
 import java.util.Arrays;
@@ -350,11 +351,11 @@ public final class ServerAnnotationProcessor {
     }
 
     private static int getFreePort() throws IOException {
-        ServerSocket ss = new ServerSocket(0);
-        int port = ss.getLocalPort();
-        ss.close();
-
-        return port;
+        try (ServerSocket ss = new ServerSocket()) {
+            ss.setReuseAddress(true);
+            ss.bind(new InetSocketAddress(0), 1);
+            return ss.getLocalPort();
+        }
     }
 
 }
diff --git 
a/components/camel-ldif/src/test/java/org/apache/directory/server/core/integ5/ServerAnnotationProcessor.java
 
b/components/camel-ldif/src/test/java/org/apache/directory/server/core/integ5/ServerAnnotationProcessor.java
index a3a7279948a8..016d38122adb 100644
--- 
a/components/camel-ldif/src/test/java/org/apache/directory/server/core/integ5/ServerAnnotationProcessor.java
+++ 
b/components/camel-ldif/src/test/java/org/apache/directory/server/core/integ5/ServerAnnotationProcessor.java
@@ -19,6 +19,7 @@ package org.apache.directory.server.core.integ5;
 import java.io.IOException;
 import java.lang.annotation.Annotation;
 import java.lang.reflect.Method;
+import java.net.InetSocketAddress;
 import java.net.ServerSocket;
 import java.util.ArrayList;
 import java.util.Arrays;
@@ -350,11 +351,11 @@ public final class ServerAnnotationProcessor {
     }
 
     private static int getFreePort() throws IOException {
-        ServerSocket ss = new ServerSocket(0);
-        int port = ss.getLocalPort();
-        ss.close();
-
-        return port;
+        try (ServerSocket ss = new ServerSocket()) {
+            ss.setReuseAddress(true);
+            ss.bind(new InetSocketAddress(0), 1);
+            return ss.getLocalPort();
+        }
     }
 
 }
diff --git 
a/components/camel-salesforce/camel-salesforce-component/src/test/java/org/apache/camel/component/salesforce/PubSubApiTest.java
 
b/components/camel-salesforce/camel-salesforce-component/src/test/java/org/apache/camel/component/salesforce/PubSubApiTest.java
index c559c3600a82..a828f85cd4b3 100644
--- 
a/components/camel-salesforce/camel-salesforce-component/src/test/java/org/apache/camel/component/salesforce/PubSubApiTest.java
+++ 
b/components/camel-salesforce/camel-salesforce-component/src/test/java/org/apache/camel/component/salesforce/PubSubApiTest.java
@@ -17,7 +17,6 @@
 package org.apache.camel.component.salesforce;
 
 import java.io.IOException;
-import java.net.ServerSocket;
 import java.util.Base64;
 
 import com.google.protobuf.ByteString;
@@ -246,9 +245,7 @@ public class PubSubApiTest {
         }
     }
 
-    private int getPort() throws IOException {
-        try (ServerSocket serverSocket = new ServerSocket(0)) {
-            return serverSocket.getLocalPort();
-        }
+    private int getPort() {
+        return org.apache.camel.test.AvailablePort.probePort(null, 0);
     }
 }
diff --git 
a/test-infra/camel-test-infra-kafka/src/main/java/org/apache/camel/test/infra/kafka/services/ConfluentContainer.java
 
b/test-infra/camel-test-infra-kafka/src/main/java/org/apache/camel/test/infra/kafka/services/ConfluentContainer.java
index 37da65ecad66..e1b2a981c113 100644
--- 
a/test-infra/camel-test-infra-kafka/src/main/java/org/apache/camel/test/infra/kafka/services/ConfluentContainer.java
+++ 
b/test-infra/camel-test-infra-kafka/src/main/java/org/apache/camel/test/infra/kafka/services/ConfluentContainer.java
@@ -105,7 +105,9 @@ public class ConfluentContainer extends 
GenericContainer<ConfluentContainer> {
     }
 
     private static int findFreePort() {
-        try (ServerSocket socket = new ServerSocket(0)) {
+        try (ServerSocket socket = new ServerSocket()) {
+            socket.setReuseAddress(true);
+            socket.bind(new java.net.InetSocketAddress((java.net.InetAddress) 
null, 0), 1);
             return socket.getLocalPort();
         } catch (IOException e) {
             throw new RuntimeException("Failed to find a free port", e);
diff --git 
a/test-infra/camel-test-infra-kafka/src/main/java/org/apache/camel/test/infra/kafka/services/StrimziContainer.java
 
b/test-infra/camel-test-infra-kafka/src/main/java/org/apache/camel/test/infra/kafka/services/StrimziContainer.java
index 6d39216fbbc6..e787f2812fb7 100644
--- 
a/test-infra/camel-test-infra-kafka/src/main/java/org/apache/camel/test/infra/kafka/services/StrimziContainer.java
+++ 
b/test-infra/camel-test-infra-kafka/src/main/java/org/apache/camel/test/infra/kafka/services/StrimziContainer.java
@@ -104,7 +104,9 @@ public class StrimziContainer extends 
GenericContainer<StrimziContainer> {
     }
 
     private static int findFreePort() {
-        try (ServerSocket socket = new ServerSocket(0)) {
+        try (ServerSocket socket = new ServerSocket()) {
+            socket.setReuseAddress(true);
+            socket.bind(new java.net.InetSocketAddress((java.net.InetAddress) 
null, 0), 1);
             return socket.getLocalPort();
         } catch (IOException e) {
             throw new RuntimeException("Failed to find a free port", e);

Reply via email to