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) {