Author: chirino
Date: Fri Jun 30 16:06:54 2006
New Revision: 418413
URL: http://svn.apache.org/viewvc?rev=418413&view=rev
Log:
http://issues.apache.org/activemq/browse/AMQ-787
Modified:
incubator/activemq/trunk/activemq-core/src/main/java/org/apache/activemq/transport/udp/UdpTransport.java
Modified:
incubator/activemq/trunk/activemq-core/src/main/java/org/apache/activemq/transport/udp/UdpTransport.java
URL:
http://svn.apache.org/viewvc/incubator/activemq/trunk/activemq-core/src/main/java/org/apache/activemq/transport/udp/UdpTransport.java?rev=418413&r1=418412&r2=418413&view=diff
==============================================================================
---
incubator/activemq/trunk/activemq-core/src/main/java/org/apache/activemq/transport/udp/UdpTransport.java
(original)
+++
incubator/activemq/trunk/activemq-core/src/main/java/org/apache/activemq/transport/udp/UdpTransport.java
Fri Jun 30 16:06:54 2006
@@ -33,6 +33,7 @@
import java.io.EOFException;
import java.io.IOException;
+import java.net.BindException;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.net.InetSocketAddress;
@@ -51,6 +52,9 @@
public class UdpTransport extends TransportThreadSupport implements Transport,
Service, Runnable {
private static final Log log = LogFactory.getLog(UdpTransport.class);
+ private static final int MAX_BIND_ATTEMPTS = 50;
+ private static final long BIND_ATTEMPT_DELAY = 100;
+
private CommandChannel commandChannel;
private OpenWireFormat wireFormat;
private ByteBufferPool bufferPool;
@@ -387,7 +391,26 @@
if (log.isDebugEnabled()) {
log.debug("Binding to address: " + localAddress);
}
- socket.bind(localAddress);
+
+ //
+ // We have noticed that on some platfoms like linux, after you close
down
+ // a previously bound socket, it can take a little while before we can
bind it again.
+ //
+ for(int i=0; i < MAX_BIND_ATTEMPTS; i++){
+ try {
+ socket.bind(localAddress);
+ return;
+ } catch (BindException e) {
+ if ( i+1 == MAX_BIND_ATTEMPTS )
+ throw e;
+ try {
+ Thread.sleep(BIND_ATTEMPT_DELAY);
+ } catch (InterruptedException e1) {
+ throw e;
+ }
+ }
+ }
+
}
protected DatagramChannel connect(DatagramChannel channel, SocketAddress
targetAddress2) throws IOException {