You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@mina.apache.org by tr...@apache.org on 2007/12/03 10:55:56 UTC
svn commit: r600461 - in /mina/trunk:
core/src/main/java/org/apache/mina/common/
core/src/main/java/org/apache/mina/transport/socket/
core/src/main/java/org/apache/mina/transport/socket/nio/
core/src/main/java/org/apache/mina/transport/vmpipe/ core/src...
Author: trustin
Date: Mon Dec 3 01:55:52 2007
New Revision: 600461
URL: http://svn.apache.org/viewvc?rev=600461&view=rev
Log:
* Added IoAcceptor.defaultLocalAddress(es) - bind() will use this property
* Added IoAcceptor.bind(SocketAddress...)
* Added IoAcceptor.unbind(SocketAddress...)
* Added IoAcceptor.unbindAll()
Modified:
mina/trunk/core/src/main/java/org/apache/mina/common/AbstractIoAcceptor.java
mina/trunk/core/src/main/java/org/apache/mina/common/AbstractIoService.java
mina/trunk/core/src/main/java/org/apache/mina/common/AbstractPollingConnectionlessIoAcceptor.java
mina/trunk/core/src/main/java/org/apache/mina/common/AbstractPollingIoAcceptor.java
mina/trunk/core/src/main/java/org/apache/mina/common/DummySession.java
mina/trunk/core/src/main/java/org/apache/mina/common/IoAcceptor.java
mina/trunk/core/src/main/java/org/apache/mina/transport/socket/DatagramAcceptor.java
mina/trunk/core/src/main/java/org/apache/mina/transport/socket/SocketAcceptor.java
mina/trunk/core/src/main/java/org/apache/mina/transport/socket/nio/NioDatagramAcceptor.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
mina/trunk/core/src/test/java/org/apache/mina/filter/logging/MdcInjectionFilterTest.java
mina/trunk/core/src/test/java/org/apache/mina/filter/stream/StreamWriteFilterTest.java
mina/trunk/core/src/test/java/org/apache/mina/transport/AbstractBindTest.java
mina/trunk/core/src/test/java/org/apache/mina/transport/AbstractConnectorTest.java
mina/trunk/core/src/test/java/org/apache/mina/transport/AbstractTrafficControlTest.java
mina/trunk/core/src/test/java/org/apache/mina/transport/socket/nio/DatagramConfigTest.java
mina/trunk/core/src/test/java/org/apache/mina/transport/socket/nio/DatagramRecyclerTest.java
mina/trunk/core/src/test/java/org/apache/mina/transport/vmpipe/VmPipeEventOrderTest.java
mina/trunk/core/src/test/java/org/apache/mina/transport/vmpipe/VmPipeSessionCrossCommunicationTest.java
mina/trunk/example/src/main/java/org/apache/mina/example/chat/Main.java
mina/trunk/example/src/main/java/org/apache/mina/example/echoserver/Main.java
mina/trunk/example/src/main/java/org/apache/mina/example/httpserver/codec/Server.java
mina/trunk/example/src/main/java/org/apache/mina/example/httpserver/stream/Main.java
mina/trunk/example/src/main/java/org/apache/mina/example/imagine/step1/server/ImageServer.java
mina/trunk/example/src/main/java/org/apache/mina/example/proxy/Main.java
mina/trunk/example/src/main/java/org/apache/mina/example/reverser/Main.java
mina/trunk/example/src/main/java/org/apache/mina/example/sumup/Server.java
mina/trunk/example/src/main/java/org/apache/mina/example/tapedeck/Main.java
mina/trunk/example/src/main/java/org/apache/mina/example/tennis/Main.java
mina/trunk/example/src/main/java/org/apache/mina/example/udp/MemoryMonitor.java
mina/trunk/example/src/test/java/org/apache/mina/example/echoserver/AbstractTest.java
mina/trunk/example/src/test/java/org/apache/mina/example/echoserver/ssl/SslFilterTest.java
mina/trunk/integration-jmx/src/main/java/org/apache/mina/integration/jmx/Foo.java
mina/trunk/transport-apr/src/main/java/org/apache/mina/transport/socket/apr/AprSocketAcceptor.java
Modified: mina/trunk/core/src/main/java/org/apache/mina/common/AbstractIoAcceptor.java
URL: http://svn.apache.org/viewvc/mina/trunk/core/src/main/java/org/apache/mina/common/AbstractIoAcceptor.java?rev=600461&r1=600460&r2=600461&view=diff
==============================================================================
--- mina/trunk/core/src/main/java/org/apache/mina/common/AbstractIoAcceptor.java (original)
+++ mina/trunk/core/src/main/java/org/apache/mina/common/AbstractIoAcceptor.java Mon Dec 3 01:55:52 2007
@@ -24,7 +24,9 @@
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
+import java.util.HashSet;
import java.util.List;
+import java.util.Set;
/**
@@ -36,11 +38,14 @@
public abstract class AbstractIoAcceptor
extends AbstractIoService implements IoAcceptor {
- private final List<SocketAddress> localAddresses = new ArrayList<SocketAddress>();
- private final List<SocketAddress> unmodifiableLocalAddresses =
- Collections.unmodifiableList(localAddresses);
+ private final List<SocketAddress> defaultLocalAddresses =
+ new ArrayList<SocketAddress>();
+ private final List<SocketAddress> unmodifiableDefaultLocalAddresses =
+ Collections.unmodifiableList(defaultLocalAddresses);
+ private final Set<SocketAddress> boundAddresses =
+ new HashSet<SocketAddress>();
+
private boolean disconnectOnUnbind = true;
- private boolean bound;
/**
* The lock object which is acquired while bind or unbind operation is performed.
@@ -51,24 +56,42 @@
protected AbstractIoAcceptor(IoSessionConfig sessionConfig) {
super(sessionConfig);
+ defaultLocalAddresses.add(null);
}
public SocketAddress getLocalAddress() {
+ Set<SocketAddress> localAddresses = getLocalAddresses();
if (localAddresses.isEmpty()) {
return null;
+ } else {
+ return localAddresses.iterator().next();
+ }
+ }
+
+ public final Set<SocketAddress> getLocalAddresses() {
+ Set<SocketAddress> localAddresses = new HashSet<SocketAddress>();
+ synchronized (bindLock) {
+ localAddresses.addAll(boundAddresses);
+ }
+ return localAddresses;
+ }
+
+ public SocketAddress getDefaultLocalAddress() {
+ if (defaultLocalAddresses.isEmpty()) {
+ return null;
}
- return localAddresses.iterator().next();
+ return defaultLocalAddresses.iterator().next();
}
- public final void setLocalAddress(SocketAddress localAddress) {
- setLocalAddresses(new SocketAddress[] { localAddress });
+ public final void setDefaultLocalAddress(SocketAddress localAddress) {
+ setDefaultLocalAddresses(new SocketAddress[] { localAddress });
}
- public final List<SocketAddress> getLocalAddresses() {
- return unmodifiableLocalAddresses;
+ public final List<SocketAddress> getDefaultLocalAddresses() {
+ return unmodifiableDefaultLocalAddresses;
}
- public final void setLocalAddresses(Iterable<SocketAddress> localAddresses) {
+ public final void setDefaultLocalAddresses(Iterable<? extends SocketAddress> localAddresses) {
if (localAddresses == null) {
throw new NullPointerException("localAddresses");
}
@@ -78,16 +101,16 @@
list.add(a);
}
- setLocalAddresses(list.toArray(new SocketAddress[list.size()]));
+ setDefaultLocalAddresses(list.toArray(new SocketAddress[list.size()]));
}
- public final void setLocalAddresses(SocketAddress... localAddresses) {
+ public final void setDefaultLocalAddresses(SocketAddress... localAddresses) {
if (localAddresses == null) {
throw new NullPointerException("localAddresses");
}
synchronized (bindLock) {
- if (bound) {
+ if (!boundAddresses.isEmpty()) {
throw new IllegalStateException(
"localAddress can't be set while the acceptor is bound.");
}
@@ -95,13 +118,7 @@
Collection<SocketAddress> newLocalAddresses =
new ArrayList<SocketAddress>();
for (SocketAddress a: localAddresses) {
- if (a != null &&
- !getTransportMetadata().getAddressType().isAssignableFrom(
- a.getClass())) {
- throw new IllegalArgumentException("localAddress type: "
- + a.getClass().getSimpleName() + " (expected: "
- + getTransportMetadata().getAddressType().getSimpleName() + ")");
- }
+ checkAddressType(a);
newLocalAddresses.add(a);
}
@@ -109,8 +126,8 @@
throw new IllegalArgumentException("empty localAddresses");
}
- this.localAddresses.clear();
- this.localAddresses.addAll(newLocalAddresses);
+ this.defaultLocalAddresses.clear();
+ this.defaultLocalAddresses.addAll(newLocalAddresses);
}
}
@@ -123,27 +140,64 @@
}
public final void bind() throws IOException {
+ bind(getDefaultLocalAddresses());
+ }
+
+ public final void bind(SocketAddress localAddress) throws IOException {
+ if (localAddress == null) {
+ throw new NullPointerException("localAddress");
+ }
+
+ List<SocketAddress> localAddresses = new ArrayList<SocketAddress>(1);
+ localAddresses.add(localAddress);
+ bind(localAddresses);
+ }
+
+ public final void bind(
+ SocketAddress firstLocalAddress,
+ SocketAddress... otherLocalAddresses) throws IOException {
+ if (firstLocalAddress == null) {
+ throw new NullPointerException("firstLocalAddress");
+ }
+ if (otherLocalAddresses == null) {
+ throw new NullPointerException("otherLocalAddresses");
+ }
+
+ List<SocketAddress> localAddresses = new ArrayList<SocketAddress>();
+ localAddresses.add(firstLocalAddress);
+ Collections.addAll(localAddresses, otherLocalAddresses);
+ bind(localAddresses);
+ }
+
+ public final void bind(Iterable<? extends SocketAddress> localAddresses) throws IOException {
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.");
+ }
+
+ boolean activate = false;
synchronized (bindLock) {
- if (bound) {
- throw new IllegalStateException("Already bound to: "
- + getLocalAddresses());
+ if (boundAddresses.isEmpty()) {
+ activate = true;
}
if (getHandler() == null) {
throw new IllegalStateException("handler is not set.");
}
- if (localAddresses.isEmpty()) {
- throw new IllegalStateException(
- "no local addresses were specified.");
- }
-
try {
- bind0();
+ boundAddresses.addAll(bind0(localAddressesCopy));
} catch (IOException e) {
throw e;
} catch (RuntimeException e) {
@@ -152,48 +206,137 @@
throw new RuntimeIoException(
"Failed to bind to: " + getLocalAddresses(), e);
}
- bound = true;
}
- getListeners().fireServiceActivated();
+
+ if (activate) {
+ getListeners().fireServiceActivated();
+ }
}
public final void unbind() {
+ if (getDefaultLocalAddress() == null) {
+ throw new IllegalStateException(
+ "defaultLocalAddress is null (i.e. any).");
+ }
+ unbind(getDefaultLocalAddresses());
+ }
+
+ public final void unbind(SocketAddress localAddress) {
+ if (localAddress == null) {
+ throw new NullPointerException("localAddress");
+ }
+
+ List<SocketAddress> localAddresses = new ArrayList<SocketAddress>(1);
+ localAddresses.add(localAddress);
+ unbind(localAddresses);
+ }
+
+ public final void unbind(SocketAddress firstLocalAddress,
+ SocketAddress... otherLocalAddresses) {
+ if (firstLocalAddress == null) {
+ throw new NullPointerException("firstLocalAddress");
+ }
+ if (otherLocalAddresses == null) {
+ throw new NullPointerException("otherLocalAddresses");
+ }
+
+ List<SocketAddress> localAddresses = new ArrayList<SocketAddress>();
+ localAddresses.add(firstLocalAddress);
+ Collections.addAll(localAddresses, otherLocalAddresses);
+ unbind(localAddresses);
+ }
+
+ public final void unbindAll() {
+ unbind(getLocalAddresses());
+ }
+
+ public final void unbind(Iterable<? extends SocketAddress> localAddresses) {
+ if (localAddresses == null) {
+ throw new NullPointerException("localAddresses");
+ }
+
+ boolean deactivate = false;
synchronized (bindLock) {
- if (!bound) {
+ if (boundAddresses.isEmpty()) {
return;
}
- try {
- unbind0();
- } catch (RuntimeException e) {
- throw e;
- } catch (Throwable e) {
- throw new RuntimeIoException(
- "Failed to unbind from: " + getLocalAddresses(), e);
+ List<SocketAddress> localAddressesCopy = new ArrayList<SocketAddress>();
+ int specifiedAddressCount = 0;
+ for (SocketAddress a: localAddresses) {
+ specifiedAddressCount ++;
+ if (a != null && boundAddresses.contains(a)) {
+ localAddressesCopy.add(a);
+ }
+ }
+ if (specifiedAddressCount == 0) {
+ throw new IllegalArgumentException("localAddresses is empty.");
+ }
+
+ if (!localAddressesCopy.isEmpty()) {
+ try {
+ unbind0(localAddressesCopy);
+ } catch (RuntimeException e) {
+ throw e;
+ } catch (Throwable e) {
+ throw new RuntimeIoException(
+ "Failed to unbind from: " + getLocalAddresses(), e);
+ }
+
+ boundAddresses.removeAll(boundAddresses);
+ if (boundAddresses.isEmpty()) {
+ deactivate = true;
+ }
}
- bound = false;
}
- getListeners().fireServiceDeactivated();
+ if (deactivate) {
+ getListeners().fireServiceDeactivated();
+ }
}
/**
* Implement this method to perform the actual bind operation.
+ * @return the {@link Set} of the local addresses which is bound actually
*/
- protected abstract void bind0() throws Exception;
+ protected abstract Set<SocketAddress> bind0(
+ List<? extends SocketAddress> localAddresses) throws Exception;
/**
* Implement this method to perform the actual unbind operation.
*/
- protected abstract void unbind0() throws Exception;
+ protected abstract void unbind0(
+ List<? extends SocketAddress> localAddresses) throws Exception;
@Override
public String toString() {
TransportMetadata m = getTransportMetadata();
return '(' + m.getProviderName() + ' ' + m.getName() + " acceptor: " +
(isActive()?
- "localAddress: " + getLocalAddresses() +
+ "localAddress(es): " + getLocalAddresses() +
", managedSessionCount: " + getManagedSessionCount() :
"not bound") + ')';
+ }
+
+ private void checkAddressType(SocketAddress a) {
+ if (a != null &&
+ !getTransportMetadata().getAddressType().isAssignableFrom(
+ a.getClass())) {
+ throw new IllegalArgumentException("localAddress type: "
+ + a.getClass().getSimpleName() + " (expected: "
+ + getTransportMetadata().getAddressType().getSimpleName() + ")");
+ }
+ }
+
+ protected static class AcceptorOperationFuture extends ServiceOperationFuture {
+ private final List<SocketAddress> localAddresses;
+
+ public AcceptorOperationFuture(List<? extends SocketAddress> localAddresses) {
+ this.localAddresses = new ArrayList<SocketAddress>(localAddresses);
+ }
+
+ public final List<SocketAddress> getLocalAddresses() {
+ return Collections.unmodifiableList(localAddresses);
+ }
}
}
Modified: mina/trunk/core/src/main/java/org/apache/mina/common/AbstractIoService.java
URL: http://svn.apache.org/viewvc/mina/trunk/core/src/main/java/org/apache/mina/common/AbstractIoService.java?rev=600461&r1=600460&r2=600461&view=diff
==============================================================================
--- mina/trunk/core/src/main/java/org/apache/mina/common/AbstractIoService.java (original)
+++ mina/trunk/core/src/main/java/org/apache/mina/common/AbstractIoService.java Mon Dec 3 01:55:52 2007
@@ -720,20 +720,20 @@
@SuppressWarnings("unused")
protected void finishSessionInitialization0(IoSession session, IoFuture future) {}
- protected static final class ServiceOperationFuture extends DefaultIoFuture {
+ protected static class ServiceOperationFuture extends DefaultIoFuture {
public ServiceOperationFuture() {
super(null);
}
- public boolean isDone() {
+ public final boolean isDone() {
return getValue() == Boolean.TRUE;
}
- public void setDone() {
+ public final void setDone() {
setValue(Boolean.TRUE);
}
- public Exception getException() {
+ public final Exception getException() {
if (getValue() instanceof Exception) {
return (Exception) getValue();
} else {
@@ -741,7 +741,7 @@
}
}
- public void setException(Exception exception) {
+ public final void setException(Exception exception) {
if (exception == null) {
throw new NullPointerException("exception");
}
Modified: mina/trunk/core/src/main/java/org/apache/mina/common/AbstractPollingConnectionlessIoAcceptor.java
URL: http://svn.apache.org/viewvc/mina/trunk/core/src/main/java/org/apache/mina/common/AbstractPollingConnectionlessIoAcceptor.java?rev=600461&r1=600460&r2=600461&view=diff
==============================================================================
--- mina/trunk/core/src/main/java/org/apache/mina/common/AbstractPollingConnectionlessIoAcceptor.java (original)
+++ mina/trunk/core/src/main/java/org/apache/mina/common/AbstractPollingConnectionlessIoAcceptor.java Mon Dec 3 01:55:52 2007
@@ -56,8 +56,10 @@
private final boolean createdExecutor;
private final String threadName;
private final IoProcessor<T> processor = new ConnectionlessAcceptorProcessor();
- private final Queue<ServiceOperationFuture> registerQueue = new ConcurrentLinkedQueue<ServiceOperationFuture>();
- private final Queue<ServiceOperationFuture> cancelQueue = new ConcurrentLinkedQueue<ServiceOperationFuture>();
+ private final Queue<AcceptorOperationFuture> registerQueue =
+ new ConcurrentLinkedQueue<AcceptorOperationFuture>();
+ private final Queue<AcceptorOperationFuture> cancelQueue =
+ new ConcurrentLinkedQueue<AcceptorOperationFuture>();
private final Queue<T> flushingSessions = new ConcurrentLinkedQueue<T>();
private final Map<SocketAddress, H> boundHandles =
Collections.synchronizedMap(new HashMap<SocketAddress, H>());
@@ -118,8 +120,8 @@
protected abstract boolean select(int timeout) throws Exception;
protected abstract void wakeup();
protected abstract Iterator<H> selectedHandles();
- protected abstract H bind(SocketAddress localAddress) throws Exception;
- protected abstract void unbind(H handle) throws Exception;
+ protected abstract H open(SocketAddress localAddress) throws Exception;
+ protected abstract void close(H handle) throws Exception;
protected abstract SocketAddress localAddress(H handle) throws Exception;
protected abstract boolean isReadable(H handle);
protected abstract boolean isWritable(H handle);
@@ -130,7 +132,7 @@
@Override
protected IoFuture dispose0() throws Exception {
- unbind();
+ unbindAll();
if (!disposalFuture.isDone()) {
startupWorker();
wakeup();
@@ -139,8 +141,9 @@
}
@Override
- protected final void bind0() throws Exception {
- ServiceOperationFuture request = new ServiceOperationFuture();
+ protected final Set<SocketAddress> bind0(
+ List<? extends SocketAddress> localAddresses) throws Exception {
+ AcceptorOperationFuture request = new AcceptorOperationFuture(localAddresses);
registerQueue.add(request);
startupWorker();
@@ -156,12 +159,13 @@
for (H handle: boundHandles.values()) {
newLocalAddresses.add(localAddress(handle));
}
- setLocalAddresses(newLocalAddresses);
+ return newLocalAddresses;
}
@Override
- protected final void unbind0() throws Exception {
- ServiceOperationFuture request = new ServiceOperationFuture();
+ protected final void unbind0(
+ List<? extends SocketAddress> localAddresses) throws Exception {
+ AcceptorOperationFuture request = new AcceptorOperationFuture(localAddresses);
cancelQueue.add(request);
startupWorker();
@@ -479,29 +483,24 @@
}
private int registerHandles() {
- if (registerQueue.isEmpty()) {
- return 0;
- }
-
- for (; ;) {
- ServiceOperationFuture req = registerQueue.poll();
+ for (;;) {
+ AcceptorOperationFuture req = registerQueue.poll();
if (req == null) {
break;
}
Map<SocketAddress, H> newHandles = new HashMap<SocketAddress, H>();
- List<SocketAddress> localAddresses = getLocalAddresses();
+ List<SocketAddress> localAddresses = req.getLocalAddresses();
try {
for (SocketAddress a: localAddresses) {
- H handle = bind(a);
+ H handle = open(a);
newHandles.put(localAddress(handle), handle);
}
-
boundHandles.putAll(newHandles);
getListeners().fireServiceActivated();
req.setDone();
- return boundHandles.size();
+ return newHandles.size();
} catch (Exception e) {
req.setException(e);
} finally {
@@ -509,7 +508,7 @@
if (req.getException() != null) {
for (H handle: newHandles.values()) {
try {
- unbind(handle);
+ close(handle);
} catch (Exception e) {
ExceptionMonitor.getInstance().exceptionCaught(e);
}
@@ -524,24 +523,29 @@
private int unregisterHandles() {
int nHandles = 0;
- for (; ;) {
- ServiceOperationFuture request = cancelQueue.poll();
+ for (;;) {
+ AcceptorOperationFuture request = cancelQueue.poll();
if (request == null) {
break;
}
// close the channels
- for (H handle: boundHandles.values()) {
+ for (SocketAddress a: request.getLocalAddresses()) {
+ H handle = boundHandles.remove(a);
+ if (handle == null) {
+ continue;
+ }
+
try {
- unbind(handle);
+ close(handle);
wakeup(); // wake up again to trigger thread death
- } catch (Exception e) {
+ } catch (Throwable e) {
ExceptionMonitor.getInstance().exceptionCaught(e);
+ } finally {
+ nHandles ++;
}
- nHandles ++;
}
- boundHandles.clear();
request.setDone();
}
Modified: mina/trunk/core/src/main/java/org/apache/mina/common/AbstractPollingIoAcceptor.java
URL: http://svn.apache.org/viewvc/mina/trunk/core/src/main/java/org/apache/mina/common/AbstractPollingIoAcceptor.java?rev=600461&r1=600460&r2=600461&view=diff
==============================================================================
--- mina/trunk/core/src/main/java/org/apache/mina/common/AbstractPollingIoAcceptor.java (original)
+++ mina/trunk/core/src/main/java/org/apache/mina/common/AbstractPollingIoAcceptor.java Mon Dec 3 01:55:52 2007
@@ -55,10 +55,10 @@
private final Object lock = new Object();
- private final Queue<ServiceOperationFuture> registerQueue =
- new ConcurrentLinkedQueue<ServiceOperationFuture>();
- private final Queue<ServiceOperationFuture> cancelQueue =
- new ConcurrentLinkedQueue<ServiceOperationFuture>();
+ private final Queue<AcceptorOperationFuture> registerQueue =
+ new ConcurrentLinkedQueue<AcceptorOperationFuture>();
+ private final Queue<AcceptorOperationFuture> cancelQueue =
+ new ConcurrentLinkedQueue<AcceptorOperationFuture>();
private final Map<SocketAddress, H> boundHandles =
Collections.synchronizedMap(new HashMap<SocketAddress, H>());
@@ -131,14 +131,14 @@
protected abstract boolean select() throws Exception;
protected abstract void wakeup();
protected abstract Iterator<H> selectedHandles();
- protected abstract H bind(SocketAddress localAddress) throws Exception;
+ protected abstract H open(SocketAddress localAddress) throws Exception;
protected abstract SocketAddress localAddress(H handle) throws Exception;
protected abstract T accept(IoProcessor<T> processor, H handle) throws Exception;
- protected abstract void unbind(H handle) throws Exception;
+ protected abstract void close(H handle) throws Exception;
@Override
protected IoFuture dispose0() throws Exception {
- unbind();
+ unbindAll();
if (!disposalFuture.isDone()) {
startupWorker();
wakeup();
@@ -147,8 +147,8 @@
}
@Override
- protected final void bind0() throws Exception {
- ServiceOperationFuture request = new ServiceOperationFuture();
+ protected final Set<SocketAddress> bind0(List<? extends SocketAddress> localAddresses) throws Exception {
+ AcceptorOperationFuture request = new AcceptorOperationFuture(localAddresses);
// adds the Registration request to the queue for the Workers
// to handle
@@ -171,7 +171,8 @@
for (H handle: boundHandles.values()) {
newLocalAddresses.add(localAddress(handle));
}
- setLocalAddresses(newLocalAddresses);
+
+ return newLocalAddresses;
}
/**
@@ -198,8 +199,8 @@
}
@Override
- protected final void unbind0() throws Exception {
- ServiceOperationFuture future = new ServiceOperationFuture();
+ protected final void unbind0(List<? extends SocketAddress> localAddresses) throws Exception {
+ AcceptorOperationFuture future = new AcceptorOperationFuture(localAddresses);
cancelQueue.add(future);
startupWorker();
@@ -316,17 +317,17 @@
*/
private int registerHandles() {
for (;;) {
- ServiceOperationFuture future = registerQueue.poll();
+ AcceptorOperationFuture future = registerQueue.poll();
if (future == null) {
break;
}
Map<SocketAddress, H> newHandles = new HashMap<SocketAddress, H>();
- List<SocketAddress> localAddresses = getLocalAddresses();
+ List<SocketAddress> localAddresses = future.getLocalAddresses();
try {
for (SocketAddress a: localAddresses) {
- H handle = bind(a);
+ H handle = open(a);
newHandles.put(localAddress(handle), handle);
}
@@ -334,7 +335,7 @@
// and notify.
future.setDone();
- return boundHandles.size();
+ return newHandles.size();
} catch (Exception e) {
future.setException(e);
} finally {
@@ -342,7 +343,7 @@
if (future.getException() != null) {
for (H handle: newHandles.values()) {
try {
- unbind(handle);
+ close(handle);
} catch (Exception e) {
ExceptionMonitor.getInstance().exceptionCaught(e);
}
@@ -364,24 +365,28 @@
private int unregisterHandles() {
int cancelledHandles = 0;
for (; ;) {
- ServiceOperationFuture future = cancelQueue.poll();
+ AcceptorOperationFuture future = cancelQueue.poll();
if (future == null) {
break;
}
-
+
// close the channels
- for (H handle: boundHandles.values()) {
+ for (SocketAddress a: future.getLocalAddresses()) {
+ H handle = boundHandles.remove(a);
+ if (handle == null) {
+ continue;
+ }
+
try {
- unbind(handle);
+ close(handle);
wakeup(); // wake up again to trigger thread death
- } catch (Exception e) {
+ } catch (Throwable e) {
ExceptionMonitor.getInstance().exceptionCaught(e);
+ } finally {
+ cancelledHandles ++;
}
-
- cancelledHandles ++;
}
- boundHandles.clear();
future.setDone();
}
Modified: mina/trunk/core/src/main/java/org/apache/mina/common/DummySession.java
URL: http://svn.apache.org/viewvc/mina/trunk/core/src/main/java/org/apache/mina/common/DummySession.java?rev=600461&r1=600460&r2=600461&view=diff
==============================================================================
--- mina/trunk/core/src/main/java/org/apache/mina/common/DummySession.java (original)
+++ mina/trunk/core/src/main/java/org/apache/mina/common/DummySession.java Mon Dec 3 01:55:52 2007
@@ -19,8 +19,9 @@
*/
package org.apache.mina.common;
-import java.io.IOException;
import java.net.SocketAddress;
+import java.util.List;
+import java.util.Set;
/**
* A dummy {@link IoSession} for unit-testing or non-network-use of
@@ -75,12 +76,12 @@
}) {
@Override
- protected void bind0() throws IOException {
+ protected Set<SocketAddress> bind0(List<? extends SocketAddress> localAddresses) throws Exception {
throw new UnsupportedOperationException();
}
@Override
- protected void unbind0() {
+ protected void unbind0(List<? extends SocketAddress> localAddresses) throws Exception {
throw new UnsupportedOperationException();
}
@@ -100,7 +101,6 @@
// Set meaningless default values.
acceptor.setHandler(new IoHandlerAdapter());
- acceptor.setLocalAddress(ANONYMOUS_ADDRESS);
this.service = acceptor;
Modified: mina/trunk/core/src/main/java/org/apache/mina/common/IoAcceptor.java
URL: http://svn.apache.org/viewvc/mina/trunk/core/src/main/java/org/apache/mina/common/IoAcceptor.java?rev=600461&r1=600460&r2=600461&view=diff
==============================================================================
--- mina/trunk/core/src/main/java/org/apache/mina/common/IoAcceptor.java (original)
+++ mina/trunk/core/src/main/java/org/apache/mina/common/IoAcceptor.java Mon Dec 3 01:55:52 2007
@@ -22,6 +22,7 @@
import java.io.IOException;
import java.net.SocketAddress;
import java.util.List;
+import java.util.Set;
/**
* Accepts incoming connection, communicates with clients, and fires events to
@@ -43,43 +44,54 @@
*/
public interface IoAcceptor extends IoService {
/**
- * Returns the local address to bind. If more than one address are set,
- * one of them will be returned, but it's not necessarily the firstly
- * specified address in {@link #setLocalAddresses(SocketAddress...)}.
+ * Returns the local address which is bound currently. If more than one
+ * address are bound, only one of them will be returned, but it's not
+ * necessarily the firstly bound address.
*/
SocketAddress getLocalAddress();
/**
- * Returns a {@link List} of the local addresses to bind.
- *
- * @throws IllegalStateException if this service is already running.
+ * Returns a {@link Set} of the local addresses which are bound currently.
*/
- List<SocketAddress> getLocalAddresses();
+ Set<SocketAddress> getLocalAddresses();
/**
- * Sets the local address to bind.
- *
- * @throws IllegalStateException if this service is already running.
+ * Returns the default local address to bind when no argument is specified
+ * in {@link #bind()} method. Please note that the default will not be
+ * used if any local address is specified. If more than one address are
+ * set, only one of them will be returned, but it's not necessarily the
+ * firstly specified address in {@link #setDefaultLocalAddresses(SocketAddress...)}.
+ *
*/
- void setLocalAddress(SocketAddress localAddress);
+ SocketAddress getDefaultLocalAddress();
/**
- * Sets the local addresses to bind. If more than one address is
- * specified, {@link #bind()} method binds to all the addresses with
- * the same {@link IoHandler}.
- *
- * @throws IllegalStateException if this service is already running.
+ * Returns a {@link List} of the default local addresses to bind when no
+ * argument is specified in {@link #bind()} method. Please note that the
+ * default will not be used if any local address is specified.
+ */
+ List<SocketAddress> getDefaultLocalAddresses();
+
+ /**
+ * Sets the default local address to bind when no argument is specified in
+ * {@link #bind()} method. Please note that the default will not be used
+ * if any local address is specified.
*/
- void setLocalAddresses(SocketAddress... localAddresses);
+ void setDefaultLocalAddress(SocketAddress localAddress);
/**
- * Sets the local addresses to bind. If more than one address is
- * specified, {@link #bind()} method binds to all the addresses with
- * the same {@link IoHandler}.
- *
- * @throws IllegalStateException if this service is already running.
+ * Sets the default local addresses to bind when no argument is specified
+ * in {@link #bind()} method. Please note that the default will not be
+ * used if any local address is specified.
+ */
+ void setDefaultLocalAddresses(SocketAddress... localAddresses);
+
+ /**
+ * Sets the default local addresses to bind when no argument is specified
+ * in {@link #bind()} method. Please note that the default will not be
+ * used if any local address is specified.
*/
- void setLocalAddresses(Iterable<SocketAddress> localAddresses);
+ void setDefaultLocalAddresses(Iterable<? extends SocketAddress> localAddresses);
/**
* Returns <tt>true</tt> if and only if all clients are disconnected
@@ -94,18 +106,81 @@
void setDisconnectOnUnbind(boolean disconnectOnUnbind);
/**
- * Bind to the configured local address and start to accept incoming connections.
+ * Binds to the default local address(es) and start to accept incoming
+ * connections.
*
* @throws IOException if failed to bind
*/
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;
+
/**
- * Unbind from the configured local address and stop to accept incoming connections.
- * All managed connections will be closed if <tt>disconnectOnUnbind</tt> property is set.
- * This method does nothing if not bound yet.
+ * Binds to the specified local addresses and start to accept incoming
+ * connections.
+ *
+ * @throws IOException if failed to bind
+ */
+ void bind(SocketAddress firstLocalAddress, SocketAddress... otherLocalAddresses) throws IOException;
+
+ /**
+ * Binds to the specified local addresses and start to accept incoming
+ * connections.
+ *
+ * @throws IOException if failed to bind
+ */
+ void bind(Iterable<? extends SocketAddress> localAddresses) throws IOException;
+
+ /**
+ * Unbinds from the default local address(es) and stop to accept incoming
+ * connections. All managed connections will be closed if
+ * {@link #setDisconnectOnUnbind(boolean) disconnectOnUnbind} property is
+ * <tt>true</tt>. This method returns silently if the default local
+ * address(es) are not bound yet.
*/
void unbind();
+
+ /**
+ * Unbinds from the specified local address and stop to accept incoming
+ * connections. All managed connections will be closed if
+ * {@link #setDisconnectOnUnbind(boolean) disconnectOnUnbind} property is
+ * <tt>true</tt>. This method returns silently if the default local
+ * address is not bound yet.
+ */
+ void unbind(SocketAddress localAddress);
+
+ /**
+ * Unbinds from the specified local addresses and stop to accept incoming
+ * connections. All managed connections will be closed if
+ * {@link #setDisconnectOnUnbind(boolean) disconnectOnUnbind} property is
+ * <tt>true</tt>. This method returns silently if the default local
+ * addresses are not bound yet.
+ */
+ void unbind(SocketAddress firstLocalAddress, SocketAddress... otherLocalAddresses);
+
+ /**
+ * Unbinds from the specified local addresses and stop to accept incoming
+ * connections. All managed connections will be closed if
+ * {@link #setDisconnectOnUnbind(boolean) disconnectOnUnbind} property is
+ * <tt>true</tt>. This method returns silently if the default local
+ * addresses are not bound yet.
+ */
+ void unbind(Iterable<? extends SocketAddress> localAddresses);
+
+ /**
+ * Unbinds from all local addresses that this service is bound to and stops
+ * to accept incoming connections. All managed connections will be closed
+ * if {@link #setDisconnectOnUnbind(boolean) disconnectOnUnbind} property
+ * is <tt>true</tt>. This method returns silently if no local address is
+ * bound yet.
+ */
+ void unbindAll();
/**
* (Optional) Returns an {@link IoSession} that is bound to the specified
Modified: mina/trunk/core/src/main/java/org/apache/mina/transport/socket/DatagramAcceptor.java
URL: http://svn.apache.org/viewvc/mina/trunk/core/src/main/java/org/apache/mina/transport/socket/DatagramAcceptor.java?rev=600461&r1=600460&r2=600461&view=diff
==============================================================================
--- mina/trunk/core/src/main/java/org/apache/mina/transport/socket/DatagramAcceptor.java (original)
+++ mina/trunk/core/src/main/java/org/apache/mina/transport/socket/DatagramAcceptor.java Mon Dec 3 01:55:52 2007
@@ -32,7 +32,8 @@
*/
public interface DatagramAcceptor extends DatagramService, IoAcceptor {
InetSocketAddress getLocalAddress();
- void setLocalAddress(InetSocketAddress localAddress);
+ InetSocketAddress getDefaultLocalAddress();
+ void setDefaultLocalAddress(InetSocketAddress localAddress);
/**
* Returns the {@link IoSessionRecycler} for this service.
Modified: mina/trunk/core/src/main/java/org/apache/mina/transport/socket/SocketAcceptor.java
URL: http://svn.apache.org/viewvc/mina/trunk/core/src/main/java/org/apache/mina/transport/socket/SocketAcceptor.java?rev=600461&r1=600460&r2=600461&view=diff
==============================================================================
--- mina/trunk/core/src/main/java/org/apache/mina/transport/socket/SocketAcceptor.java (original)
+++ mina/trunk/core/src/main/java/org/apache/mina/transport/socket/SocketAcceptor.java Mon Dec 3 01:55:52 2007
@@ -32,8 +32,9 @@
* @version $Rev$, $Date$
*/
public interface SocketAcceptor extends SocketService, IoAcceptor {
- public InetSocketAddress getLocalAddress();
- public void setLocalAddress(InetSocketAddress localAddress);
+ InetSocketAddress getLocalAddress();
+ InetSocketAddress getDefaultLocalAddress();
+ void setDefaultLocalAddress(InetSocketAddress localAddress);
/**
* @see ServerSocket#getReuseAddress()
Modified: mina/trunk/core/src/main/java/org/apache/mina/transport/socket/nio/NioDatagramAcceptor.java
URL: http://svn.apache.org/viewvc/mina/trunk/core/src/main/java/org/apache/mina/transport/socket/nio/NioDatagramAcceptor.java?rev=600461&r1=600460&r2=600461&view=diff
==============================================================================
--- mina/trunk/core/src/main/java/org/apache/mina/transport/socket/nio/NioDatagramAcceptor.java (original)
+++ mina/trunk/core/src/main/java/org/apache/mina/transport/socket/nio/NioDatagramAcceptor.java Mon Dec 3 01:55:52 2007
@@ -88,13 +88,18 @@
public InetSocketAddress getLocalAddress() {
return (InetSocketAddress) super.getLocalAddress();
}
+
+ @Override
+ public InetSocketAddress getDefaultLocalAddress() {
+ return (InetSocketAddress) super.getDefaultLocalAddress();
+ }
- public void setLocalAddress(InetSocketAddress localAddress) {
- setLocalAddress((SocketAddress) localAddress);
+ public void setDefaultLocalAddress(InetSocketAddress localAddress) {
+ setDefaultLocalAddress((SocketAddress) localAddress);
}
@Override
- protected DatagramChannel bind(SocketAddress localAddress) throws Exception {
+ protected DatagramChannel open(SocketAddress localAddress) throws Exception {
DatagramChannel c = DatagramChannel.open();
boolean success = false;
try {
@@ -114,7 +119,7 @@
success = true;
} finally {
if (!success) {
- unbind(c);
+ close(c);
}
}
@@ -205,7 +210,7 @@
}
@Override
- protected void unbind(DatagramChannel handle) throws Exception {
+ protected void close(DatagramChannel handle) throws Exception {
SelectionKey key = handle.keyFor(selector);
if (key != null) {
key.cancel();
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=600461&r1=600460&r2=600461&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 Mon Dec 3 01:55:52 2007
@@ -99,9 +99,14 @@
public InetSocketAddress getLocalAddress() {
return (InetSocketAddress) super.getLocalAddress();
}
+
+ @Override
+ public InetSocketAddress getDefaultLocalAddress() {
+ return (InetSocketAddress) super.getDefaultLocalAddress();
+ }
- public void setLocalAddress(InetSocketAddress localAddress) {
- setLocalAddress((SocketAddress) localAddress);
+ public void setDefaultLocalAddress(InetSocketAddress localAddress) {
+ setDefaultLocalAddress((SocketAddress) localAddress);
}
public boolean isReuseAddress() {
@@ -154,7 +159,7 @@
}
@Override
- protected ServerSocketChannel bind(SocketAddress localAddress)
+ protected ServerSocketChannel open(SocketAddress localAddress)
throws Exception {
ServerSocketChannel c = ServerSocketChannel.open();
boolean success = false;
@@ -165,12 +170,14 @@
c.socket().setReceiveBufferSize(
getSessionConfig().getReceiveBufferSize());
// and bind.
- c.socket().bind(localAddress, getBacklog());
+ synchronized (c) {
+ c.socket().bind(localAddress, getBacklog());
+ }
c.register(selector, SelectionKey.OP_ACCEPT);
success = true;
} finally {
if (!success) {
- unbind(c);
+ close(c);
}
}
return c;
@@ -179,7 +186,9 @@
@Override
protected SocketAddress localAddress(ServerSocketChannel handle)
throws Exception {
- return handle.socket().getLocalSocketAddress();
+ synchronized (handle) {
+ return handle.socket().getLocalSocketAddress();
+ }
}
@Override
@@ -193,7 +202,7 @@
}
@Override
- protected void unbind(ServerSocketChannel handle) throws Exception {
+ protected void close(ServerSocketChannel handle) throws Exception {
SelectionKey key = handle.keyFor(selector);
if (key != null) {
key.cancel();
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=600461&r1=600460&r2=600461&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 Mon Dec 3 01:55:52 2007
@@ -21,10 +21,11 @@
import java.io.IOException;
import java.net.SocketAddress;
-import java.util.ArrayList;
import java.util.HashMap;
+import java.util.HashSet;
import java.util.List;
import java.util.Map;
+import java.util.Set;
import org.apache.mina.common.AbstractIoAcceptor;
import org.apache.mina.common.IoFuture;
@@ -63,23 +64,27 @@
return (VmPipeAddress) super.getLocalAddress();
}
+ @Override
+ public VmPipeAddress getDefaultLocalAddress() {
+ return (VmPipeAddress) super.getDefaultLocalAddress();
+ }
+
// This method is overriden to work around a problem with
// bean property access mechanism.
- public void setLocalAddress(VmPipeAddress localAddress) {
- super.setLocalAddress(localAddress);
+ public void setDefaultLocalAddress(VmPipeAddress localAddress) {
+ super.setDefaultLocalAddress(localAddress);
}
@Override
protected IoFuture dispose0() throws Exception {
- unbind();
+ unbindAll();
return null;
}
@Override
- protected void bind0() throws IOException {
- List<SocketAddress> localAddresses = getLocalAddresses();
- List<SocketAddress> newLocalAddresses = new ArrayList<SocketAddress>();
+ protected Set<SocketAddress> bind0(List<? extends SocketAddress> localAddresses) throws IOException {
+ Set<SocketAddress> newLocalAddresses = new HashSet<SocketAddress>();
synchronized (boundHandlers) {
for (SocketAddress a: localAddresses) {
@@ -121,16 +126,16 @@
}
}
- setLocalAddresses(newLocalAddresses);
+ return newLocalAddresses;
}
@Override
- protected void unbind0() {
+ protected void unbind0(List<? extends SocketAddress> localAddresses) {
synchronized (boundHandlers) {
- boundHandlers.remove(getLocalAddress());
+ for (SocketAddress a: localAddresses) {
+ boundHandlers.remove(a);
+ }
}
-
- getListeners().fireServiceDeactivated();
}
public IoSession newSession(SocketAddress remoteAddress, SocketAddress localAddress) {
Modified: mina/trunk/core/src/test/java/org/apache/mina/filter/logging/MdcInjectionFilterTest.java
URL: http://svn.apache.org/viewvc/mina/trunk/core/src/test/java/org/apache/mina/filter/logging/MdcInjectionFilterTest.java?rev=600461&r1=600460&r2=600461&view=diff
==============================================================================
--- mina/trunk/core/src/test/java/org/apache/mina/filter/logging/MdcInjectionFilterTest.java (original)
+++ mina/trunk/core/src/test/java/org/apache/mina/filter/logging/MdcInjectionFilterTest.java Mon Dec 3 01:55:52 2007
@@ -82,7 +82,7 @@
@Override
protected void tearDown() throws Exception {
- acceptor.unbind();
+ acceptor.dispose();
super.tearDown();
}
@@ -158,8 +158,7 @@
chain.addLast("protocol", new ProtocolCodecFilter(new DummyProtocolCodecFactory()));
SimpleIoHandler simpleIoHandler = new SimpleIoHandler();
acceptor.setHandler(simpleIoHandler);
- acceptor.setLocalAddress(new InetSocketAddress(PORT));
- acceptor.bind();
+ acceptor.bind(new InetSocketAddress(PORT));
acceptor.setFilterChainBuilder(chain);
// create some clients
NioSocketConnector connector = new NioSocketConnector();
@@ -192,8 +191,7 @@
// configure the server
SimpleIoHandler simpleIoHandler = new SimpleIoHandler();
acceptor.setHandler(simpleIoHandler);
- acceptor.setLocalAddress(new InetSocketAddress(PORT));
- acceptor.bind();
+ acceptor.bind(new InetSocketAddress(PORT));
acceptor.setFilterChainBuilder(chain);
// create some clients
NioSocketConnector connector = new NioSocketConnector();
Modified: mina/trunk/core/src/test/java/org/apache/mina/filter/stream/StreamWriteFilterTest.java
URL: http://svn.apache.org/viewvc/mina/trunk/core/src/test/java/org/apache/mina/filter/stream/StreamWriteFilterTest.java?rev=600461&r1=600460&r2=600461&view=diff
==============================================================================
--- mina/trunk/core/src/test/java/org/apache/mina/filter/stream/StreamWriteFilterTest.java (original)
+++ mina/trunk/core/src/test/java/org/apache/mina/filter/stream/StreamWriteFilterTest.java Mon Dec 3 01:55:52 2007
@@ -351,18 +351,15 @@
SenderHandler sender = new SenderHandler(stream);
ReceiverHandler receiver = new ReceiverHandler(stream.size);
- acceptor.setLocalAddress(address);
acceptor.setHandler(sender);
-
connector.setHandler(receiver);
-
- acceptor.bind();
-
+
+ acceptor.bind(address);
connector.connect(address);
sender.latch.await();
receiver.latch.await();
- acceptor.unbind();
+ acceptor.dispose();
assertEquals(stream.bytesRead, receiver.bytesRead);
assertEquals(stream.size, receiver.bytesRead);
Modified: mina/trunk/core/src/test/java/org/apache/mina/transport/AbstractBindTest.java
URL: http://svn.apache.org/viewvc/mina/trunk/core/src/test/java/org/apache/mina/transport/AbstractBindTest.java?rev=600461&r1=600460&r2=600461&view=diff
==============================================================================
--- mina/trunk/core/src/test/java/org/apache/mina/transport/AbstractBindTest.java (original)
+++ mina/trunk/core/src/test/java/org/apache/mina/transport/AbstractBindTest.java Mon Dec 3 01:55:52 2007
@@ -76,7 +76,7 @@
for (port = 1; port <= 65535; port++) {
socketBound = false;
try {
- acceptor.setLocalAddress(createSocketAddress(port));
+ acceptor.setDefaultLocalAddress(createSocketAddress(port));
acceptor.bind();
socketBound = true;
break;
@@ -105,25 +105,26 @@
@Override
public void tearDown() {
try {
- acceptor.unbind();
+ acceptor.dispose();
} catch (Exception e) {
// ignore
}
- acceptor.setLocalAddress(null);
+ acceptor.setDefaultLocalAddress(null);
}
public void testAnonymousBind() throws Exception {
acceptor.setHandler(new IoHandlerAdapter());
- acceptor.setLocalAddress(null);
+ acceptor.setDefaultLocalAddress(null);
acceptor.bind();
Assert.assertNotNull(acceptor.getLocalAddress());
- acceptor.unbind();
- acceptor.setLocalAddress(createSocketAddress(0));
+ acceptor.unbind(acceptor.getLocalAddress());
+ Assert.assertNull(acceptor.getLocalAddress());
+ acceptor.setDefaultLocalAddress(createSocketAddress(0));
acceptor.bind();
Assert.assertNotNull(acceptor.getLocalAddress());
Assert.assertTrue(getPort(acceptor.getLocalAddress()) != 0);
- acceptor.unbind();
+ acceptor.unbind(acceptor.getLocalAddress());
}
public void testDuplicateBind() throws IOException {
@@ -131,8 +132,8 @@
try {
acceptor.bind();
- Assert.fail("IllegalStateException is not thrown");
- } catch (IllegalStateException e) {
+ Assert.fail("Exception is not thrown");
+ } catch (Exception e) {
}
}
@@ -190,7 +191,7 @@
SocketAddress addr = createSocketAddress(port);
EchoProtocolHandler handler = new EchoProtocolHandler();
- acceptor.setLocalAddress(addr);
+ acceptor.setDefaultLocalAddress(addr);
acceptor.setHandler(handler);
for (int i = 0; i < 1048576; i++) {
acceptor.bind();
Modified: mina/trunk/core/src/test/java/org/apache/mina/transport/AbstractConnectorTest.java
URL: http://svn.apache.org/viewvc/mina/trunk/core/src/test/java/org/apache/mina/transport/AbstractConnectorTest.java?rev=600461&r1=600460&r2=600461&view=diff
==============================================================================
--- mina/trunk/core/src/test/java/org/apache/mina/transport/AbstractConnectorTest.java (original)
+++ mina/trunk/core/src/test/java/org/apache/mina/transport/AbstractConnectorTest.java Mon Dec 3 01:55:52 2007
@@ -41,15 +41,13 @@
public abstract class AbstractConnectorTest extends TestCase {
protected abstract IoAcceptor createAcceptor();
-
protected abstract IoConnector createConnector();
public void testConnectFutureSuccessTiming() throws Exception {
int port = AvailablePortFinder.getNextAvailable(1025);
IoAcceptor acceptor = createAcceptor();
- acceptor.setLocalAddress(new InetSocketAddress(port));
acceptor.setHandler(new IoHandlerAdapter());
- acceptor.bind();
+ acceptor.bind(new InetSocketAddress(port));
try {
final StringBuffer buf = new StringBuffer();
@@ -77,7 +75,7 @@
future.getSession().close();
Assert.assertEquals("123", buf.toString());
} finally {
- acceptor.unbind();
+ acceptor.dispose();
}
}
@@ -102,16 +100,21 @@
buf.append("Z");
}
});
- ConnectFuture future = connector.connect(new InetSocketAddress(
- "localhost", port));
- future.awaitUninterruptibly();
- buf.append("1");
+
try {
- future.getSession().close();
- fail();
- } catch (RuntimeIoException e) {
- // OK.
+ ConnectFuture future = connector.connect(new InetSocketAddress(
+ "localhost", port));
+ future.awaitUninterruptibly();
+ buf.append("1");
+ try {
+ future.getSession().close();
+ fail();
+ } catch (RuntimeIoException e) {
+ // OK.
+ }
+ Assert.assertEquals("1", buf.toString());
+ } finally {
+ connector.dispose();
}
- Assert.assertEquals("1", buf.toString());
}
}
Modified: mina/trunk/core/src/test/java/org/apache/mina/transport/AbstractTrafficControlTest.java
URL: http://svn.apache.org/viewvc/mina/trunk/core/src/test/java/org/apache/mina/transport/AbstractTrafficControlTest.java?rev=600461&r1=600460&r2=600461&view=diff
==============================================================================
--- mina/trunk/core/src/test/java/org/apache/mina/transport/AbstractTrafficControlTest.java (original)
+++ mina/trunk/core/src/test/java/org/apache/mina/transport/AbstractTrafficControlTest.java Mon Dec 3 01:55:52 2007
@@ -55,16 +55,15 @@
super.setUp();
port = AvailablePortFinder.getNextAvailable();
- acceptor.setLocalAddress(createServerSocketAddress(port));
acceptor.setHandler(new ServerIoHandler());
- acceptor.bind();
+ acceptor.bind(createServerSocketAddress(port));
}
@Override
protected void tearDown() throws Exception {
super.tearDown();
- acceptor.unbind();
+ acceptor.dispose();
}
protected abstract ConnectFuture connect(int port, IoHandler handler)
Modified: mina/trunk/core/src/test/java/org/apache/mina/transport/socket/nio/DatagramConfigTest.java
URL: http://svn.apache.org/viewvc/mina/trunk/core/src/test/java/org/apache/mina/transport/socket/nio/DatagramConfigTest.java?rev=600461&r1=600460&r2=600461&view=diff
==============================================================================
--- mina/trunk/core/src/test/java/org/apache/mina/transport/socket/nio/DatagramConfigTest.java (original)
+++ mina/trunk/core/src/test/java/org/apache/mina/transport/socket/nio/DatagramConfigTest.java Mon Dec 3 01:55:52 2007
@@ -43,10 +43,8 @@
* @version $Rev$, $Date$
*/
public class DatagramConfigTest extends TestCase {
- private final IoAcceptor acceptor = new NioDatagramAcceptor();
-
- private final IoConnector connector = new NioDatagramConnector();
-
+ private IoAcceptor acceptor;
+ private IoConnector connector;
private String result;
public DatagramConfigTest() {
@@ -55,6 +53,14 @@
@Override
protected void setUp() throws Exception {
result = "";
+ acceptor = new NioDatagramAcceptor();
+ connector = new NioDatagramConnector();
+ }
+
+ @Override
+ protected void tearDown() throws Exception {
+ acceptor.dispose();
+ connector.dispose();
}
public void testAcceptorFilterChain() throws Exception {
@@ -63,9 +69,8 @@
IoHandler mockHandler = new MockHandler();
acceptor.getFilterChain().addLast("mock", mockFilter);
- acceptor.setLocalAddress(new InetSocketAddress(port));
acceptor.setHandler(mockHandler);
- acceptor.bind();
+ acceptor.bind(new InetSocketAddress(port));
try {
connector.setHandler(new IoHandlerAdapter());
@@ -89,7 +94,7 @@
Assert.assertEquals("FH", result);
} finally {
- acceptor.unbind();
+ acceptor.unbindAll();
}
}
Modified: mina/trunk/core/src/test/java/org/apache/mina/transport/socket/nio/DatagramRecyclerTest.java
URL: http://svn.apache.org/viewvc/mina/trunk/core/src/test/java/org/apache/mina/transport/socket/nio/DatagramRecyclerTest.java?rev=600461&r1=600460&r2=600461&view=diff
==============================================================================
--- mina/trunk/core/src/test/java/org/apache/mina/transport/socket/nio/DatagramRecyclerTest.java (original)
+++ mina/trunk/core/src/test/java/org/apache/mina/transport/socket/nio/DatagramRecyclerTest.java Mon Dec 3 01:55:52 2007
@@ -40,13 +40,26 @@
* @version $Rev$, $Date$
*/
public class DatagramRecyclerTest extends TestCase {
- private final NioDatagramAcceptor acceptor = new NioDatagramAcceptor();
-
- private final NioDatagramConnector connector = new NioDatagramConnector();
+ private NioDatagramAcceptor acceptor;
+ private NioDatagramConnector connector;
public DatagramRecyclerTest() {
}
+ @Override
+ protected void setUp() throws Exception {
+ super.setUp();
+ acceptor = new NioDatagramAcceptor();
+ connector = new NioDatagramConnector();
+ }
+
+ @Override
+ protected void tearDown() throws Exception {
+ super.tearDown();
+ acceptor.dispose();
+ connector.dispose();
+ }
+
public void testDatagramRecycler() throws Exception {
int port = AvailablePortFinder.getNextAvailable(1024);
ExpiringSessionRecycler recycler = new ExpiringSessionRecycler(1, 1);
@@ -54,10 +67,9 @@
MockHandler acceptorHandler = new MockHandler();
MockHandler connectorHandler = new MockHandler();
- acceptor.setLocalAddress(new InetSocketAddress(port));
acceptor.setHandler(acceptorHandler);
acceptor.setSessionRecycler(recycler);
- acceptor.bind();
+ acceptor.bind(new InetSocketAddress(port));
try {
connector.setHandler(connectorHandler);
@@ -91,7 +103,7 @@
Assert.assertEquals("CROPSECL", connectorHandler.result.toString());
Assert.assertEquals("CROPRECL", acceptorHandler.result.toString());
} finally {
- acceptor.unbind();
+ acceptor.unbindAll();
}
}
@@ -102,11 +114,10 @@
MockHandler acceptorHandler = new MockHandler();
MockHandler connectorHandler = new MockHandler();
- acceptor.setLocalAddress(new InetSocketAddress(port));
acceptor.getSessionConfig().setIdleTime(IdleStatus.READER_IDLE, 1);
acceptor.setHandler(acceptorHandler);
acceptor.setSessionRecycler(recycler);
- acceptor.bind();
+ acceptor.bind(new InetSocketAddress(port));
try {
connector.setHandler(connectorHandler);
@@ -155,7 +166,7 @@
Assert.assertNotSame(oldSession, acceptorHandler.session);
} finally {
- acceptor.unbind();
+ acceptor.unbindAll();
}
}
Modified: mina/trunk/core/src/test/java/org/apache/mina/transport/vmpipe/VmPipeEventOrderTest.java
URL: http://svn.apache.org/viewvc/mina/trunk/core/src/test/java/org/apache/mina/transport/vmpipe/VmPipeEventOrderTest.java?rev=600461&r1=600460&r2=600461&view=diff
==============================================================================
--- mina/trunk/core/src/test/java/org/apache/mina/transport/vmpipe/VmPipeEventOrderTest.java (original)
+++ mina/trunk/core/src/test/java/org/apache/mina/transport/vmpipe/VmPipeEventOrderTest.java Mon Dec 3 01:55:52 2007
@@ -42,7 +42,6 @@
IoConnector connector = new VmPipeConnector();
//connector.getFilterChain().addLast( "logger", new LoggingFilter() );
- acceptor.setLocalAddress(new VmPipeAddress(1));
acceptor.setHandler(new IoHandlerAdapter() {
@Override
public void sessionOpened(IoSession session) throws Exception {
@@ -56,7 +55,7 @@
}
});
- acceptor.bind();
+ acceptor.bind(new VmPipeAddress(1));
final StringBuffer actual = new StringBuffer();
@@ -84,7 +83,7 @@
future.awaitUninterruptibly();
future.getSession().getCloseFuture().awaitUninterruptibly();
- acceptor.unbind();
+ acceptor.dispose();
// sessionClosed() might not be invoked yet
// even if the connection is closed.
@@ -104,7 +103,6 @@
final StringBuffer actual = new StringBuffer();
- acceptor.setLocalAddress(new VmPipeAddress(1));
acceptor.setHandler(new IoHandlerAdapter() {
@Override
@@ -125,7 +123,7 @@
});
- acceptor.bind();
+ acceptor.bind(new VmPipeAddress(1));
connector.setHandler(new IoHandlerAdapter() {
@Override
@@ -144,7 +142,8 @@
future.awaitUninterruptibly();
future.getSession().getCloseFuture().awaitUninterruptibly();
- acceptor.unbind();
+ acceptor.dispose();
+ connector.dispose();
// sessionClosed() might not be invoked yet
// even if the connection is closed.
Modified: mina/trunk/core/src/test/java/org/apache/mina/transport/vmpipe/VmPipeSessionCrossCommunicationTest.java
URL: http://svn.apache.org/viewvc/mina/trunk/core/src/test/java/org/apache/mina/transport/vmpipe/VmPipeSessionCrossCommunicationTest.java?rev=600461&r1=600460&r2=600461&view=diff
==============================================================================
--- mina/trunk/core/src/test/java/org/apache/mina/transport/vmpipe/VmPipeSessionCrossCommunicationTest.java (original)
+++ mina/trunk/core/src/test/java/org/apache/mina/transport/vmpipe/VmPipeSessionCrossCommunicationTest.java Mon Dec 3 01:55:52 2007
@@ -62,8 +62,7 @@
}
}
});
- acceptor.setLocalAddress(address);
- acceptor.bind();
+ acceptor.bind(address);
connector.setHandler(new IoHandlerAdapter() {
@Override
@@ -143,6 +142,6 @@
}
acceptor.setDisconnectOnUnbind(false);
- acceptor.unbind();
+ acceptor.dispose();
}
}
Modified: mina/trunk/example/src/main/java/org/apache/mina/example/chat/Main.java
URL: http://svn.apache.org/viewvc/mina/trunk/example/src/main/java/org/apache/mina/example/chat/Main.java?rev=600461&r1=600460&r2=600461&view=diff
==============================================================================
--- mina/trunk/example/src/main/java/org/apache/mina/example/chat/Main.java (original)
+++ mina/trunk/example/src/main/java/org/apache/mina/example/chat/Main.java Mon Dec 3 01:55:52 2007
@@ -19,6 +19,8 @@
*/
package org.apache.mina.example.chat;
+import java.net.InetSocketAddress;
+
import org.apache.mina.common.DefaultIoFilterChainBuilder;
import org.apache.mina.example.echoserver.ssl.BogusSslContextFactory;
import org.apache.mina.filter.codec.ProtocolCodecFilter;
@@ -28,8 +30,6 @@
import org.apache.mina.filter.ssl.SslFilter;
import org.apache.mina.transport.socket.nio.NioSocketAcceptor;
-import java.net.InetSocketAddress;
-
/**
* (<b>Entry point</b>) Chat server
*
@@ -61,9 +61,8 @@
addLogger(chain);
// Bind
- acceptor.setLocalAddress(new InetSocketAddress(PORT));
acceptor.setHandler(new ChatProtocolHandler());
- acceptor.bind();
+ acceptor.bind(new InetSocketAddress(PORT));
System.out.println("Listening on port " + PORT);
}
Modified: mina/trunk/example/src/main/java/org/apache/mina/example/echoserver/Main.java
URL: http://svn.apache.org/viewvc/mina/trunk/example/src/main/java/org/apache/mina/example/echoserver/Main.java?rev=600461&r1=600460&r2=600461&view=diff
==============================================================================
--- mina/trunk/example/src/main/java/org/apache/mina/example/echoserver/Main.java (original)
+++ mina/trunk/example/src/main/java/org/apache/mina/example/echoserver/Main.java Mon Dec 3 01:55:52 2007
@@ -51,9 +51,8 @@
}
// Bind
- acceptor.setLocalAddress(new InetSocketAddress(PORT));
acceptor.setHandler(new EchoProtocolHandler());
- acceptor.bind();
+ acceptor.bind(new InetSocketAddress(PORT));
System.out.println("Listening on port " + PORT);
Modified: mina/trunk/example/src/main/java/org/apache/mina/example/httpserver/codec/Server.java
URL: http://svn.apache.org/viewvc/mina/trunk/example/src/main/java/org/apache/mina/example/httpserver/codec/Server.java?rev=600461&r1=600460&r2=600461&view=diff
==============================================================================
--- mina/trunk/example/src/main/java/org/apache/mina/example/httpserver/codec/Server.java (original)
+++ mina/trunk/example/src/main/java/org/apache/mina/example/httpserver/codec/Server.java Mon Dec 3 01:55:52 2007
@@ -57,10 +57,8 @@
new ProtocolCodecFilter(
new HttpServerProtocolCodecFactory()));
acceptor.getFilterChain().addLast("logger", new LoggingFilter());
-
- acceptor.setLocalAddress(new InetSocketAddress(port));
acceptor.setHandler(new ServerHandler());
- acceptor.bind();
+ acceptor.bind(new InetSocketAddress(port));
System.out.println("Server now listening on port " + port);
} catch (Exception ex) {
Modified: mina/trunk/example/src/main/java/org/apache/mina/example/httpserver/stream/Main.java
URL: http://svn.apache.org/viewvc/mina/trunk/example/src/main/java/org/apache/mina/example/httpserver/stream/Main.java?rev=600461&r1=600460&r2=600461&view=diff
==============================================================================
--- mina/trunk/example/src/main/java/org/apache/mina/example/httpserver/stream/Main.java (original)
+++ mina/trunk/example/src/main/java/org/apache/mina/example/httpserver/stream/Main.java Mon Dec 3 01:55:52 2007
@@ -49,9 +49,8 @@
}
// Bind
- acceptor.setLocalAddress(new InetSocketAddress(PORT));
acceptor.setHandler(new HttpProtocolHandler());
- acceptor.bind();
+ acceptor.bind(new InetSocketAddress(PORT));
System.out.println("Listening on port " + PORT);
}
Modified: mina/trunk/example/src/main/java/org/apache/mina/example/imagine/step1/server/ImageServer.java
URL: http://svn.apache.org/viewvc/mina/trunk/example/src/main/java/org/apache/mina/example/imagine/step1/server/ImageServer.java?rev=600461&r1=600460&r2=600461&view=diff
==============================================================================
--- mina/trunk/example/src/main/java/org/apache/mina/example/imagine/step1/server/ImageServer.java (original)
+++ mina/trunk/example/src/main/java/org/apache/mina/example/imagine/step1/server/ImageServer.java Mon Dec 3 01:55:52 2007
@@ -19,13 +19,13 @@
*/
package org.apache.mina.example.imagine.step1.server;
+import java.io.IOException;
+import java.net.InetSocketAddress;
+
import org.apache.mina.example.imagine.step1.codec.ImageCodecFactory;
import org.apache.mina.filter.codec.ProtocolCodecFilter;
import org.apache.mina.transport.socket.nio.NioSocketAcceptor;
-import java.io.IOException;
-import java.net.InetSocketAddress;
-
/**
* entry point for the server used in the tutorial on protocol codecs
*
@@ -40,9 +40,8 @@
ImageServerIoHandler handler = new ImageServerIoHandler();
NioSocketAcceptor acceptor = new NioSocketAcceptor();
acceptor.getFilterChain().addLast("protocol", new ProtocolCodecFilter(new ImageCodecFactory(false)));
- acceptor.setLocalAddress(new InetSocketAddress(PORT));
acceptor.setHandler(handler);
- acceptor.bind();
+ acceptor.bind(new InetSocketAddress(PORT));
System.out.println("server is listenig at port " + PORT);
}
}
Modified: mina/trunk/example/src/main/java/org/apache/mina/example/proxy/Main.java
URL: http://svn.apache.org/viewvc/mina/trunk/example/src/main/java/org/apache/mina/example/proxy/Main.java?rev=600461&r1=600460&r2=600461&view=diff
==============================================================================
--- mina/trunk/example/src/main/java/org/apache/mina/example/proxy/Main.java (original)
+++ mina/trunk/example/src/main/java/org/apache/mina/example/proxy/Main.java Mon Dec 3 01:55:52 2007
@@ -62,10 +62,8 @@
new InetSocketAddress(args[1], Integer.parseInt(args[2])));
// Start proxy.
- acceptor.setLocalAddress(new InetSocketAddress(Integer
- .parseInt(args[0])));
acceptor.setHandler(handler);
- acceptor.bind();
+ acceptor.bind(new InetSocketAddress(Integer.parseInt(args[0])));
System.out.println("Listening on port " + Integer.parseInt(args[0]));
}
Modified: mina/trunk/example/src/main/java/org/apache/mina/example/reverser/Main.java
URL: http://svn.apache.org/viewvc/mina/trunk/example/src/main/java/org/apache/mina/example/reverser/Main.java?rev=600461&r1=600460&r2=600461&view=diff
==============================================================================
--- mina/trunk/example/src/main/java/org/apache/mina/example/reverser/Main.java (original)
+++ mina/trunk/example/src/main/java/org/apache/mina/example/reverser/Main.java Mon Dec 3 01:55:52 2007
@@ -48,9 +48,8 @@
.forName("UTF-8"))));
// Bind
- acceptor.setLocalAddress(new InetSocketAddress(PORT));
acceptor.setHandler(new ReverseProtocolHandler());
- acceptor.bind();
+ acceptor.bind(new InetSocketAddress(PORT));
System.out.println("Listening on port " + PORT);
}
Modified: mina/trunk/example/src/main/java/org/apache/mina/example/sumup/Server.java
URL: http://svn.apache.org/viewvc/mina/trunk/example/src/main/java/org/apache/mina/example/sumup/Server.java?rev=600461&r1=600460&r2=600461&view=diff
==============================================================================
--- mina/trunk/example/src/main/java/org/apache/mina/example/sumup/Server.java (original)
+++ mina/trunk/example/src/main/java/org/apache/mina/example/sumup/Server.java Mon Dec 3 01:55:52 2007
@@ -57,9 +57,8 @@
}
acceptor.getFilterChain().addLast("logger", new LoggingFilter());
- acceptor.setLocalAddress(new InetSocketAddress(SERVER_PORT));
acceptor.setHandler(new ServerSessionHandler());
- acceptor.bind();
+ acceptor.bind(new InetSocketAddress(SERVER_PORT));
System.out.println("Listening on port " + SERVER_PORT);
}
Modified: mina/trunk/example/src/main/java/org/apache/mina/example/tapedeck/Main.java
URL: http://svn.apache.org/viewvc/mina/trunk/example/src/main/java/org/apache/mina/example/tapedeck/Main.java?rev=600461&r1=600460&r2=600461&view=diff
==============================================================================
--- mina/trunk/example/src/main/java/org/apache/mina/example/tapedeck/Main.java (original)
+++ mina/trunk/example/src/main/java/org/apache/mina/example/tapedeck/Main.java Mon Dec 3 01:55:52 2007
@@ -64,7 +64,6 @@
new TextLineEncoder(), new CommandDecoder());
acceptor.getFilterChain().addLast("codec", pcf);
acceptor.setHandler(createIoHandler());
- acceptor.setLocalAddress(new InetSocketAddress(PORT));
- acceptor.bind();
+ acceptor.bind(new InetSocketAddress(PORT));
}
}
Modified: mina/trunk/example/src/main/java/org/apache/mina/example/tennis/Main.java
URL: http://svn.apache.org/viewvc/mina/trunk/example/src/main/java/org/apache/mina/example/tennis/Main.java?rev=600461&r1=600460&r2=600461&view=diff
==============================================================================
--- mina/trunk/example/src/main/java/org/apache/mina/example/tennis/Main.java (original)
+++ mina/trunk/example/src/main/java/org/apache/mina/example/tennis/Main.java Mon Dec 3 01:55:52 2007
@@ -47,9 +47,8 @@
VmPipeAddress address = new VmPipeAddress(8080);
// Set up server
- acceptor.setLocalAddress(address);
acceptor.setHandler(new TennisPlayer());
- acceptor.bind();
+ acceptor.bind(address);
// Connect to the server.
VmPipeConnector connector = new VmPipeConnector();
@@ -64,6 +63,6 @@
// Wait until the match ends.
session.getCloseFuture().awaitUninterruptibly();
- acceptor.unbind();
+ acceptor.unbindAll();
}
}
Modified: mina/trunk/example/src/main/java/org/apache/mina/example/udp/MemoryMonitor.java
URL: http://svn.apache.org/viewvc/mina/trunk/example/src/main/java/org/apache/mina/example/udp/MemoryMonitor.java?rev=600461&r1=600460&r2=600461&view=diff
==============================================================================
--- mina/trunk/example/src/main/java/org/apache/mina/example/udp/MemoryMonitor.java (original)
+++ mina/trunk/example/src/main/java/org/apache/mina/example/udp/MemoryMonitor.java Mon Dec 3 01:55:52 2007
@@ -60,7 +60,6 @@
public MemoryMonitor() throws IOException {
NioDatagramAcceptor acceptor = new NioDatagramAcceptor();
- acceptor.setLocalAddress(new InetSocketAddress(PORT));
acceptor.setHandler(new MemoryMonitorHandler(this));
DefaultIoFilterChainBuilder chain = acceptor.getFilterChain();
@@ -78,7 +77,7 @@
frame.setLocation(300, 300);
frame.setVisible(true);
- acceptor.bind();
+ acceptor.bind(new InetSocketAddress(PORT));
System.out.println("UDPServer listening on port " + PORT);
}
Modified: mina/trunk/example/src/test/java/org/apache/mina/example/echoserver/AbstractTest.java
URL: http://svn.apache.org/viewvc/mina/trunk/example/src/test/java/org/apache/mina/example/echoserver/AbstractTest.java?rev=600461&r1=600460&r2=600461&view=diff
==============================================================================
--- mina/trunk/example/src/test/java/org/apache/mina/example/echoserver/AbstractTest.java (original)
+++ mina/trunk/example/src/test/java/org/apache/mina/example/echoserver/AbstractTest.java Mon Dec 3 01:55:52 2007
@@ -25,8 +25,8 @@
import junit.framework.TestCase;
-import org.apache.mina.common.IoBuffer;
import org.apache.mina.common.IoAcceptor;
+import org.apache.mina.common.IoBuffer;
import org.apache.mina.common.IoSession;
import org.apache.mina.common.IoSessionLogger;
import org.apache.mina.example.echoserver.ssl.BogusSslContextFactory;
@@ -108,7 +108,6 @@
address = new InetSocketAddress(port);
try {
- socketAcceptor.setLocalAddress(address);
socketAcceptor.setHandler(new EchoProtocolHandler() {
@Override
public void sessionCreated(IoSession session) {
@@ -145,22 +144,21 @@
}
}
});
- socketAcceptor.bind();
+ socketAcceptor.bind(address);
socketBound = true;
- datagramAcceptor.setLocalAddress(address);
datagramAcceptor.setHandler(new EchoProtocolHandler());
- datagramAcceptor.bind();
+ datagramAcceptor.bind(address);
datagramBound = true;
break;
} catch (IOException e) {
} finally {
if (socketBound && !datagramBound) {
- socketAcceptor.unbind();
+ socketAcceptor.unbindAll();
}
if (datagramBound && !socketBound) {
- datagramAcceptor.unbind();
+ datagramAcceptor.unbindAll();
}
}
}
@@ -177,8 +175,8 @@
@Override
protected void tearDown() throws Exception {
if (boundAddress != null) {
- socketAcceptor.unbind();
- datagramAcceptor.unbind();
+ socketAcceptor.dispose();
+ datagramAcceptor.dispose();
}
}
}
Modified: mina/trunk/example/src/test/java/org/apache/mina/example/echoserver/ssl/SslFilterTest.java
URL: http://svn.apache.org/viewvc/mina/trunk/example/src/test/java/org/apache/mina/example/echoserver/ssl/SslFilterTest.java?rev=600461&r1=600460&r2=600461&view=diff
==============================================================================
--- mina/trunk/example/src/test/java/org/apache/mina/example/echoserver/ssl/SslFilterTest.java (original)
+++ mina/trunk/example/src/test/java/org/apache/mina/example/echoserver/ssl/SslFilterTest.java Mon Dec 3 01:55:52 2007
@@ -37,7 +37,7 @@
@Override
protected void tearDown() throws Exception {
acceptor.setDisconnectOnUnbind(true);
- acceptor.unbind();
+ acceptor.dispose();
super.tearDown();
}
@@ -60,11 +60,9 @@
new ProtocolCodecFilter(new TextLineCodecFactory(Charset
.forName("UTF-8"))));
- acceptor.setLocalAddress(new InetSocketAddress(PORT));
-
EchoHandler handler = new EchoHandler();
acceptor.setHandler(handler);
- acceptor.bind();
+ acceptor.bind(new InetSocketAddress(PORT));
System.out.println("MINA server started.");
Socket socket = getClientSocket(useSSL);
Modified: mina/trunk/integration-jmx/src/main/java/org/apache/mina/integration/jmx/Foo.java
URL: http://svn.apache.org/viewvc/mina/trunk/integration-jmx/src/main/java/org/apache/mina/integration/jmx/Foo.java?rev=600461&r1=600460&r2=600461&view=diff
==============================================================================
--- mina/trunk/integration-jmx/src/main/java/org/apache/mina/integration/jmx/Foo.java (original)
+++ mina/trunk/integration-jmx/src/main/java/org/apache/mina/integration/jmx/Foo.java Mon Dec 3 01:55:52 2007
@@ -21,7 +21,6 @@
IoAcceptor service = new NioSocketAcceptor();
service.setHandler(new IoHandlerAdapter());
- service.setLocalAddress(new InetSocketAddress(8080));
ExecutorFilter executorFilter = new ExecutorFilter(
new OrderedThreadPoolExecutor(
@@ -29,8 +28,7 @@
new IoEventQueueThrottle(1048576)));
service.getFilterChain().addLast("executor", executorFilter);
-
- service.bind();
+ service.bind(new InetSocketAddress(8080));
server.registerMBean(
new IoServiceMBean(service),
Modified: mina/trunk/transport-apr/src/main/java/org/apache/mina/transport/socket/apr/AprSocketAcceptor.java
URL: http://svn.apache.org/viewvc/mina/trunk/transport-apr/src/main/java/org/apache/mina/transport/socket/apr/AprSocketAcceptor.java?rev=600461&r1=600460&r2=600461&view=diff
==============================================================================
--- mina/trunk/transport-apr/src/main/java/org/apache/mina/transport/socket/apr/AprSocketAcceptor.java (original)
+++ mina/trunk/transport-apr/src/main/java/org/apache/mina/transport/socket/apr/AprSocketAcceptor.java Mon Dec 3 01:55:52 2007
@@ -71,7 +71,7 @@
}
@Override
- protected Long bind(SocketAddress localAddress) throws Exception {
+ protected Long open(SocketAddress localAddress) throws Exception {
InetSocketAddress la = (InetSocketAddress) localAddress;
long handle = Socket.create(
Socket.APR_INET, Socket.SOCK_STREAM, Socket.APR_PROTO_TCP, pool);
@@ -113,7 +113,7 @@
success = true;
} finally {
if (!success) {
- unbind(handle);
+ close(handle);
}
}
return handle;
@@ -218,7 +218,7 @@
}
@Override
- protected void unbind(Long handle) throws Exception {
+ protected void close(Long handle) throws Exception {
Poll.remove(pollset, handle);
int result = Socket.close(handle);
if (result != Status.APR_SUCCESS) {
@@ -258,8 +258,18 @@
}
}
- public void setLocalAddress(InetSocketAddress localAddress) {
- super.setLocalAddress(localAddress);
+ @Override
+ public InetSocketAddress getLocalAddress() {
+ return (InetSocketAddress) super.getLocalAddress();
+ }
+
+ @Override
+ public InetSocketAddress getDefaultLocalAddress() {
+ return (InetSocketAddress) super.getDefaultLocalAddress();
+ }
+
+ public void setDefaultLocalAddress(InetSocketAddress localAddress) {
+ super.setDefaultLocalAddress(localAddress);
}
public void setReuseAddress(boolean reuseAddress) {
@@ -282,11 +292,6 @@
return (SocketSessionConfig) super.getSessionConfig();
}
- @Override
- public InetSocketAddress getLocalAddress() {
- return (InetSocketAddress) super.getLocalAddress();
- }
-
private void throwException(int code) throws IOException {
throw new IOException(
org.apache.tomcat.jni.Error.strerror(-code) +