You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@mina.apache.org by el...@apache.org on 2009/03/08 14:17:12 UTC

svn commit: r751415 - in /mina/trunk/core/src/main/java/org/apache/mina: core/polling/ core/service/ core/session/ transport/socket/nio/ transport/vmpipe/

Author: elecharny
Date: Sun Mar  8 13:17:11 2009
New Revision: 751415

URL: http://svn.apache.org/viewvc?rev=751415&view=rev
Log:
o Renamed the bind0 method to bindInternal, which is slightly more meaningfull
o Added some comments, plus minor refactoring
o Removed the void bind(SocketAddress localAddress) and bind(SocketAddress firstLocalAddress, SocketAddress... otherLocalAddresses) methods, and replaced them with a void bind(SocketAddress... addresses) (both cases are covered with this single method, and it has no impact on the existing code using those removed methods.
o Added a toString() method to AbstractIoAcceptor

Modified:
    mina/trunk/core/src/main/java/org/apache/mina/core/polling/AbstractPollingConnectionlessIoAcceptor.java
    mina/trunk/core/src/main/java/org/apache/mina/core/polling/AbstractPollingIoAcceptor.java
    mina/trunk/core/src/main/java/org/apache/mina/core/service/AbstractIoAcceptor.java
    mina/trunk/core/src/main/java/org/apache/mina/core/service/IoAcceptor.java
    mina/trunk/core/src/main/java/org/apache/mina/core/session/DummySession.java
    mina/trunk/core/src/main/java/org/apache/mina/transport/socket/nio/NioSocketAcceptor.java
    mina/trunk/core/src/main/java/org/apache/mina/transport/vmpipe/VmPipeAcceptor.java

Modified: mina/trunk/core/src/main/java/org/apache/mina/core/polling/AbstractPollingConnectionlessIoAcceptor.java
URL: http://svn.apache.org/viewvc/mina/trunk/core/src/main/java/org/apache/mina/core/polling/AbstractPollingConnectionlessIoAcceptor.java?rev=751415&r1=751414&r2=751415&view=diff
==============================================================================
--- mina/trunk/core/src/main/java/org/apache/mina/core/polling/AbstractPollingConnectionlessIoAcceptor.java (original)
+++ mina/trunk/core/src/main/java/org/apache/mina/core/polling/AbstractPollingConnectionlessIoAcceptor.java Sun Mar  8 13:17:11 2009
@@ -144,7 +144,7 @@
      * {@inheritDoc}
      */
     @Override
-    protected final Set<SocketAddress> bind0(
+    protected final Set<SocketAddress> bindInternal(
             List<? extends SocketAddress> localAddresses) throws Exception {
         AcceptorOperationFuture request = new AcceptorOperationFuture(localAddresses);
 

Modified: mina/trunk/core/src/main/java/org/apache/mina/core/polling/AbstractPollingIoAcceptor.java
URL: http://svn.apache.org/viewvc/mina/trunk/core/src/main/java/org/apache/mina/core/polling/AbstractPollingIoAcceptor.java?rev=751415&r1=751414&r2=751415&view=diff
==============================================================================
--- mina/trunk/core/src/main/java/org/apache/mina/core/polling/AbstractPollingIoAcceptor.java (original)
+++ mina/trunk/core/src/main/java/org/apache/mina/core/polling/AbstractPollingIoAcceptor.java Sun Mar  8 13:17:11 2009
@@ -302,8 +302,10 @@
      * {@inheritDoc}
      */
     @Override
-    protected final Set<SocketAddress> bind0(
+    protected final Set<SocketAddress> bindInternal(
             List<? extends SocketAddress> localAddresses) throws Exception {
+        // Create a bind request as a Future operation. When the selector
+        // have handled the registration, it will signal this future.
         AcceptorOperationFuture request = new AcceptorOperationFuture(
                 localAddresses);
 
@@ -314,7 +316,13 @@
         // creates the Acceptor instance and has the local
         // executor kick it off.
         startupAcceptor();
+        
+        // As we just started the acceptor, we have to unblock the select()
+        // in order to process the bind request we just have added to the 
+        // registerQueue.
         wakeup();
+        
+        // Now, we wait until this request is completed.
         request.awaitUninterruptibly();
 
         if (request.getException() != null) {
@@ -325,6 +333,7 @@
         // setLocalAddresses() shouldn't be called from the worker thread
         // because of deadlock.
         Set<SocketAddress> newLocalAddresses = new HashSet<SocketAddress>();
+        
         for (H handle : boundHandles.values()) {
             newLocalAddresses.add(localAddress(handle));
         }
@@ -395,7 +404,7 @@
                     int selected = select();
 
                     // this actually sets the selector to OP_ACCEPT,
-                    // and binds to the port in which this class will
+                    // and binds to the port on which this class will
                     // listen on
                     nHandles += registerHandles();
 

Modified: mina/trunk/core/src/main/java/org/apache/mina/core/service/AbstractIoAcceptor.java
URL: http://svn.apache.org/viewvc/mina/trunk/core/src/main/java/org/apache/mina/core/service/AbstractIoAcceptor.java?rev=751415&r1=751414&r2=751415&view=diff
==============================================================================
--- mina/trunk/core/src/main/java/org/apache/mina/core/service/AbstractIoAcceptor.java (original)
+++ mina/trunk/core/src/main/java/org/apache/mina/core/service/AbstractIoAcceptor.java Sun Mar  8 13:17:11 2009
@@ -212,33 +212,19 @@
     /**
      * {@inheritDoc}
      */
-    public final void bind(SocketAddress localAddress) throws IOException {
-        if (localAddress == null) {
-            throw new NullPointerException("localAddress");
+    public final void bind(SocketAddress... addresses) throws IOException {
+        if ((addresses == null) || (addresses.length == 0)) {
+            bind(getDefaultLocalAddresses());
         }
         
-        List<SocketAddress> localAddresses = new ArrayList<SocketAddress>(1);
-        localAddresses.add(localAddress);
-        bind(localAddresses);
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public final void bind(
-            SocketAddress firstLocalAddress,
-            SocketAddress... otherLocalAddresses) throws IOException {
-        if (firstLocalAddress == null) {
-            throw new NullPointerException("firstLocalAddress");
-        }
-        if (otherLocalAddresses == null) {
-            throw new NullPointerException("otherLocalAddresses");
+        if (addresses.length == 1) {
+            List<SocketAddress> localAddresses = new ArrayList<SocketAddress>(addresses.length);
+            for (SocketAddress address:addresses) {
+                localAddresses.add(address);
+            }
+            
+            bind(localAddresses);
         }
-        
-        List<SocketAddress> localAddresses = new ArrayList<SocketAddress>();
-        localAddresses.add(firstLocalAddress);
-        Collections.addAll(localAddresses, otherLocalAddresses);
-        bind(localAddresses);
     }
 
     /**
@@ -248,15 +234,18 @@
         if (isDisposing()) {
             throw new IllegalStateException("Already disposed.");
         }
+        
         if (localAddresses == null) {
             throw new NullPointerException("localAddresses");
         }
         
         List<SocketAddress> localAddressesCopy = new ArrayList<SocketAddress>();
+        
         for (SocketAddress a: localAddresses) {
             checkAddressType(a);
             localAddressesCopy.add(a);
         }
+        
         if (localAddressesCopy.isEmpty()) {
             throw new IllegalArgumentException("localAddresses is empty.");
         }
@@ -272,7 +261,7 @@
             }
             
             try {
-                boundAddresses.addAll(bind0(localAddressesCopy));
+                boundAddresses.addAll(bindInternal(localAddressesCopy));
             } catch (IOException e) {
                 throw e;
             } catch (RuntimeException e) {
@@ -375,10 +364,10 @@
     }
 
     /**
-     * Implement this method to perform the actual bind operation.
+     * Starts the acceptor, and register the given addresses
      * @return the {@link Set} of the local addresses which is bound actually
      */
-    protected abstract Set<SocketAddress> bind0(
+    protected abstract Set<SocketAddress> bindInternal(
             List<? extends SocketAddress> localAddresses) throws Exception;
 
     /**
@@ -417,5 +406,29 @@
         public final List<SocketAddress> getLocalAddresses() {
             return Collections.unmodifiableList(localAddresses);
         }
+        
+        /**
+         * @see Object#toString()
+         */
+        public String toString() {
+            StringBuilder sb = new StringBuilder();
+            
+            sb.append( "Acceptor operation : " );
+            
+            if (localAddresses != null) {
+                boolean isFirst = true;
+                
+                for (SocketAddress address:localAddresses) {
+                    if (isFirst) {
+                        isFirst = false;
+                    } else {
+                        sb.append(", ");
+                    }
+                    
+                    sb.append(address);
+                }
+            }
+            return sb.toString(); 
+        }
     }
 }

Modified: mina/trunk/core/src/main/java/org/apache/mina/core/service/IoAcceptor.java
URL: http://svn.apache.org/viewvc/mina/trunk/core/src/main/java/org/apache/mina/core/service/IoAcceptor.java?rev=751415&r1=751414&r2=751415&view=diff
==============================================================================
--- mina/trunk/core/src/main/java/org/apache/mina/core/service/IoAcceptor.java (original)
+++ mina/trunk/core/src/main/java/org/apache/mina/core/service/IoAcceptor.java Sun Mar  8 13:17:11 2009
@@ -125,20 +125,12 @@
     void bind() throws IOException;
     
     /**
-     * Binds to the specified local address and start to accept incoming
-     * connections.
-     *
-     * @throws IOException if failed to bind
-     */
-    void bind(SocketAddress localAddress) throws IOException;
-    
-    /**
      * Binds to the specified local addresses and start to accept incoming
-     * connections.
+     * connections. If no address is given, bind on the default local address.
      *
      * @throws IOException if failed to bind
      */
-    void bind(SocketAddress firstLocalAddress, SocketAddress... otherLocalAddresses) throws IOException;
+    void bind(SocketAddress... addresses) throws IOException;
     
     /**
      * Binds to the specified local addresses and start to accept incoming

Modified: mina/trunk/core/src/main/java/org/apache/mina/core/session/DummySession.java
URL: http://svn.apache.org/viewvc/mina/trunk/core/src/main/java/org/apache/mina/core/session/DummySession.java?rev=751415&r1=751414&r2=751415&view=diff
==============================================================================
--- mina/trunk/core/src/main/java/org/apache/mina/core/session/DummySession.java (original)
+++ mina/trunk/core/src/main/java/org/apache/mina/core/session/DummySession.java Sun Mar  8 13:17:11 2009
@@ -100,7 +100,7 @@
                 }) {
 
             @Override
-            protected Set<SocketAddress> bind0(List<? extends SocketAddress> localAddresses) throws Exception {
+            protected Set<SocketAddress> bindInternal(List<? extends SocketAddress> localAddresses) throws Exception {
                 throw new UnsupportedOperationException();
             }
 

Modified: mina/trunk/core/src/main/java/org/apache/mina/transport/socket/nio/NioSocketAcceptor.java
URL: http://svn.apache.org/viewvc/mina/trunk/core/src/main/java/org/apache/mina/transport/socket/nio/NioSocketAcceptor.java?rev=751415&r1=751414&r2=751415&view=diff
==============================================================================
--- mina/trunk/core/src/main/java/org/apache/mina/transport/socket/nio/NioSocketAcceptor.java (original)
+++ mina/trunk/core/src/main/java/org/apache/mina/transport/socket/nio/NioSocketAcceptor.java Sun Mar  8 13:17:11 2009
@@ -235,16 +235,21 @@
         boolean success = false;
         
         try {
+            // This is a non blocking socket channel
             channel.configureBlocking(false);
         
             // Configure the server socket,
             ServerSocket socket = channel.socket();
             
+            // Set the reuseAddress flag accordingly with the setting
             socket.setReuseAddress(isReuseAddress());
+            
             // XXX: Do we need to provide this property? (I think we need to remove it.)
             socket.setReceiveBufferSize(getSessionConfig().getReceiveBufferSize());
+            
             // and bind.
             socket.bind(localAddress, getBacklog());
+            
             // Register the channel within the selector for ACCEPT event
             channel.register(selector, SelectionKey.OP_ACCEPT);
             success = true;

Modified: mina/trunk/core/src/main/java/org/apache/mina/transport/vmpipe/VmPipeAcceptor.java
URL: http://svn.apache.org/viewvc/mina/trunk/core/src/main/java/org/apache/mina/transport/vmpipe/VmPipeAcceptor.java?rev=751415&r1=751414&r2=751415&view=diff
==============================================================================
--- mina/trunk/core/src/main/java/org/apache/mina/transport/vmpipe/VmPipeAcceptor.java (original)
+++ mina/trunk/core/src/main/java/org/apache/mina/transport/vmpipe/VmPipeAcceptor.java Sun Mar  8 13:17:11 2009
@@ -102,7 +102,7 @@
     }
 
     @Override
-    protected Set<SocketAddress> bind0(List<? extends SocketAddress> localAddresses) throws IOException {
+    protected Set<SocketAddress> bindInternal(List<? extends SocketAddress> localAddresses) throws IOException {
         Set<SocketAddress> newLocalAddresses = new HashSet<SocketAddress>();
 
         synchronized (boundHandlers) {