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

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

commit 8ab02f1df0a3b2629a24f77cbbeb5becc71f7dae
Author: Guillaume Nodet <[email protected]>
AuthorDate: Thu Mar 19 12:59:14 2026 +0100

    Set setReuseAddress(true) on AS2 server sockets
    
    Without setReuseAddress(true), restarting the AS2 server quickly can
    cause BindException due to TCP TIME_WAIT state on the port. Fix by
    creating unbound sockets, setting setReuseAddress(true), then binding.
    
    Co-Authored-By: Claude Opus 4.6 <[email protected]>
---
 .../camel/component/as2/api/AS2AsyncMDNServerConnection.java      | 8 ++++++--
 .../org/apache/camel/component/as2/api/AS2ServerConnection.java   | 8 ++++++--
 2 files changed, 12 insertions(+), 4 deletions(-)

diff --git 
a/components/camel-as2/camel-as2-api/src/main/java/org/apache/camel/component/as2/api/AS2AsyncMDNServerConnection.java
 
b/components/camel-as2/camel-as2-api/src/main/java/org/apache/camel/component/as2/api/AS2AsyncMDNServerConnection.java
index ac5be366f896..ae7ec4bb3a53 100644
--- 
a/components/camel-as2/camel-as2-api/src/main/java/org/apache/camel/component/as2/api/AS2AsyncMDNServerConnection.java
+++ 
b/components/camel-as2/camel-as2-api/src/main/java/org/apache/camel/component/as2/api/AS2AsyncMDNServerConnection.java
@@ -123,10 +123,14 @@ public class AS2AsyncMDNServerConnection {
         public RequestListenerThread(int port, SSLContext sslContext) throws 
IOException {
             setName(REQUEST_LISTENER_THREAD_NAME_PREFIX + port);
             if (sslContext == null) {
-                serverSocket = new ServerSocket(port);
+                serverSocket = new ServerSocket();
+                serverSocket.setReuseAddress(true);
+                serverSocket.bind(new java.net.InetSocketAddress(port));
             } else {
                 SSLServerSocketFactory factory = 
sslContext.getServerSocketFactory();
-                serverSocket = factory.createServerSocket(port);
+                serverSocket = factory.createServerSocket();
+                serverSocket.setReuseAddress(true);
+                serverSocket.bind(new java.net.InetSocketAddress(port));
             }
             HttpProcessor httpProcessor = HttpProcessorBuilder.create()
                     .add(new ResponseContent(true))
diff --git 
a/components/camel-as2/camel-as2-api/src/main/java/org/apache/camel/component/as2/api/AS2ServerConnection.java
 
b/components/camel-as2/camel-as2-api/src/main/java/org/apache/camel/component/as2/api/AS2ServerConnection.java
index 7a700e01121a..1f3bfb4a7ee7 100644
--- 
a/components/camel-as2/camel-as2-api/src/main/java/org/apache/camel/component/as2/api/AS2ServerConnection.java
+++ 
b/components/camel-as2/camel-as2-api/src/main/java/org/apache/camel/component/as2/api/AS2ServerConnection.java
@@ -440,10 +440,14 @@ public class AS2ServerConnection {
             this.service = service;
 
             if (sslContext == null) {
-                serversocket = new ServerSocket(port);
+                serversocket = new ServerSocket();
+                serversocket.setReuseAddress(true);
+                serversocket.bind(new java.net.InetSocketAddress(port));
             } else {
                 SSLServerSocketFactory factory = 
sslContext.getServerSocketFactory();
-                serversocket = factory.createServerSocket(port);
+                serversocket = factory.createServerSocket();
+                serversocket.setReuseAddress(true);
+                serversocket.bind(new java.net.InetSocketAddress(port));
             }
         }
 

Reply via email to