You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@qpid.apache.org by kw...@apache.org on 2016/04/12 13:14:09 UTC

svn commit: r1738766 - /qpid/java/trunk/common/src/main/java/org/apache/qpid/transport/network/io/IoNetworkTransport.java

Author: kwall
Date: Tue Apr 12 11:14:09 2016
New Revision: 1738766

URL: http://svn.apache.org/viewvc?rev=1738766&view=rev
Log:
QPID-7195: [Java Client] Ensure socket is closed if connect times-out or fails

Modified:
    qpid/java/trunk/common/src/main/java/org/apache/qpid/transport/network/io/IoNetworkTransport.java

Modified: qpid/java/trunk/common/src/main/java/org/apache/qpid/transport/network/io/IoNetworkTransport.java
URL: http://svn.apache.org/viewvc/qpid/java/trunk/common/src/main/java/org/apache/qpid/transport/network/io/IoNetworkTransport.java?rev=1738766&r1=1738765&r2=1738766&view=diff
==============================================================================
--- qpid/java/trunk/common/src/main/java/org/apache/qpid/transport/network/io/IoNetworkTransport.java (original)
+++ qpid/java/trunk/common/src/main/java/org/apache/qpid/transport/network/io/IoNetworkTransport.java Tue Apr 12 11:14:09 2016
@@ -30,7 +30,6 @@ import java.util.concurrent.ConcurrentHa
 import org.slf4j.LoggerFactory;
 
 import org.apache.qpid.configuration.CommonProperties;
-import org.apache.qpid.framing.FieldTable;
 import org.apache.qpid.transport.ConnectionSettings;
 import org.apache.qpid.transport.ExceptionHandlingByteBufferReceiver;
 import org.apache.qpid.transport.TransportException;
@@ -63,42 +62,11 @@ public class IoNetworkTransport
                                      ExceptionHandlingByteBufferReceiver delegate,
                                      TransportActivity transportActivity)
     {
-        int sendBufferSize = settings.getWriteBufferSize();
-        int receiveBufferSize = settings.getReadBufferSize();
 
         final Socket socket;
         if("tcp".equalsIgnoreCase(settings.getProtocol()))
         {
-            try
-            {
-                socket = new Socket();
-                socket.setReuseAddress(true);
-                socket.setTcpNoDelay(settings.isTcpNodelay());
-                socket.setSendBufferSize(sendBufferSize);
-                socket.setReceiveBufferSize(receiveBufferSize);
-
-                if (LOGGER.isDebugEnabled())
-                {
-                    LOGGER.debug("Socket options SO_RCVBUF : {}, SO_SNDBUF : {}, TCP_NODELAY : {}",
-                                 socket.getReceiveBufferSize(),
-                                 socket.getSendBufferSize(),
-                                 socket.getTcpNoDelay());
-                }
-
-                InetAddress address = InetAddress.getByName(settings.getHost());
-
-                InetSocketAddress socketAddress = new InetSocketAddress(address, settings.getPort());
-                socket.connect(socketAddress, settings.getConnectTimeout());
-
-                LOGGER.debug("Socket connection from {} to {} established",
-                             socket.getLocalSocketAddress(),
-                             socket.getRemoteSocketAddress());
-
-            }
-            catch (IOException e)
-            {
-                throw new TransportException("Error connecting to broker", e);
-            }
+            socket = connectTcp(settings);
         }
         else if("socket".equalsIgnoreCase(settings.getProtocol()))
         {
@@ -113,6 +81,8 @@ public class IoNetworkTransport
             throw new TransportException("Unknown transport '"+settings.getProtocol()+"'");
         }
 
+        int sendBufferSize = settings.getWriteBufferSize();
+        int receiveBufferSize = settings.getReadBufferSize();
         try
         {
             IdleTimeoutTicker ticker = new IdleTimeoutTicker(transportActivity, TIMEOUT);
@@ -137,6 +107,49 @@ public class IoNetworkTransport
         return _connection;
     }
 
+    private Socket connectTcp(final ConnectionSettings settings)
+    {
+        final Socket socket = new Socket();
+        try
+        {
+            socket.setReuseAddress(true);
+            socket.setTcpNoDelay(settings.isTcpNodelay());
+            socket.setSendBufferSize(socket.getSendBufferSize());
+            socket.setReceiveBufferSize(socket.getReceiveBufferSize());
+
+            if (LOGGER.isDebugEnabled())
+            {
+                LOGGER.debug("Socket options SO_RCVBUF : {}, SO_SNDBUF : {}, TCP_NODELAY : {}",
+                             socket.getReceiveBufferSize(),
+                             socket.getSendBufferSize(),
+                             socket.getTcpNoDelay());
+            }
+
+            InetAddress address = InetAddress.getByName(settings.getHost());
+
+            InetSocketAddress socketAddress = new InetSocketAddress(address, settings.getPort());
+            socket.connect(socketAddress, settings.getConnectTimeout());
+
+            LOGGER.debug("Socket connection from {} to {} established",
+                         socket.getLocalSocketAddress(),
+                         socket.getRemoteSocketAddress());
+
+        }
+        catch (IOException e)
+        {
+            try
+            {
+                socket.close();
+            }
+            catch (IOException ignore)
+            {
+            }
+
+            throw new TransportException("Error connecting to broker", e);
+        }
+        return socket;
+    }
+
     public void close()
     {
         if(_connection != null)



---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@qpid.apache.org
For additional commands, e-mail: commits-help@qpid.apache.org