Return-Path: Delivered-To: apmail-geronimo-activemq-commits-archive@www.apache.org Received: (qmail 71381 invoked from network); 30 Jun 2006 23:07:16 -0000 Received: from hermes.apache.org (HELO mail.apache.org) (209.237.227.199) by minotaur.apache.org with SMTP; 30 Jun 2006 23:07:16 -0000 Received: (qmail 10173 invoked by uid 500); 30 Jun 2006 23:07:16 -0000 Delivered-To: apmail-geronimo-activemq-commits-archive@geronimo.apache.org Received: (qmail 10157 invoked by uid 500); 30 Jun 2006 23:07:16 -0000 Mailing-List: contact activemq-commits-help@geronimo.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: activemq-dev@geronimo.apache.org Delivered-To: mailing list activemq-commits@geronimo.apache.org Received: (qmail 10148 invoked by uid 99); 30 Jun 2006 23:07:16 -0000 Received: from asf.osuosl.org (HELO asf.osuosl.org) (140.211.166.49) by apache.org (qpsmtpd/0.29) with ESMTP; Fri, 30 Jun 2006 16:07:16 -0700 X-ASF-Spam-Status: No, hits=-9.4 required=10.0 tests=ALL_TRUSTED,NO_REAL_NAME X-Spam-Check-By: apache.org Received-SPF: pass (asf.osuosl.org: local policy) Received: from [140.211.166.113] (HELO eris.apache.org) (140.211.166.113) by apache.org (qpsmtpd/0.29) with ESMTP; Fri, 30 Jun 2006 16:07:15 -0700 Received: by eris.apache.org (Postfix, from userid 65534) id 66B291A983A; Fri, 30 Jun 2006 16:06:55 -0700 (PDT) Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: svn commit: r418413 - /incubator/activemq/trunk/activemq-core/src/main/java/org/apache/activemq/transport/udp/UdpTransport.java Date: Fri, 30 Jun 2006 23:06:55 -0000 To: activemq-commits@geronimo.apache.org From: chirino@apache.org X-Mailer: svnmailer-1.0.8 Message-Id: <20060630230655.66B291A983A@eris.apache.org> X-Virus-Checked: Checked by ClamAV on apache.org X-Spam-Rating: minotaur.apache.org 1.6.2 0/1000/N 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 {