You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@mina.apache.org by jv...@apache.org on 2009/11/03 09:33:21 UTC
svn commit: r832341 - in /mina/branches/3.0/core/src:
main/java/org/apache/mina/transport/socket/nio/NioSocketAcceptor.java
test/java/org/apache/mina/transport/socket/nio/NioAcceptorTest.java
Author: jvermillard
Date: Tue Nov 3 08:33:20 2009
New Revision: 832341
URL: http://svn.apache.org/viewvc?rev=832341&view=rev
Log:
* more explicit error while binding an already bound address
* thread safeness for binding
Modified:
mina/branches/3.0/core/src/main/java/org/apache/mina/transport/socket/nio/NioSocketAcceptor.java
mina/branches/3.0/core/src/test/java/org/apache/mina/transport/socket/nio/NioAcceptorTest.java
Modified: mina/branches/3.0/core/src/main/java/org/apache/mina/transport/socket/nio/NioSocketAcceptor.java
URL: http://svn.apache.org/viewvc/mina/branches/3.0/core/src/main/java/org/apache/mina/transport/socket/nio/NioSocketAcceptor.java?rev=832341&r1=832340&r2=832341&view=diff
==============================================================================
--- mina/branches/3.0/core/src/main/java/org/apache/mina/transport/socket/nio/NioSocketAcceptor.java (original)
+++ mina/branches/3.0/core/src/main/java/org/apache/mina/transport/socket/nio/NioSocketAcceptor.java Tue Nov 3 08:33:20 2009
@@ -46,10 +46,16 @@
public void bind(SocketAddress... localAddress) throws IOException {
for(SocketAddress address : localAddress) {
- ServerSocketChannel serverSocketChannel = ServerSocketChannel.open();
- LOG.debug("binding address {}",address);
- serverSocketChannel.socket().bind(address);
- serverSocketChannels.put(address,serverSocketChannel);
+ // check if the address is already bound
+ synchronized (this) {
+ if (serverSocketChannels.containsKey(address)) {
+ throw new IOException("address "+address+" already bound");
+ }
+ ServerSocketChannel serverSocketChannel = ServerSocketChannel.open();
+ LOG.debug("binding address {}",address);
+ serverSocketChannel.socket().bind(address);
+ serverSocketChannels.put(address,serverSocketChannel);
+ }
}
}
@@ -62,11 +68,14 @@
public void unbind(SocketAddress... localAddresses) throws IOException {
for (SocketAddress socketAddress : localAddresses) {
LOG.debug("unbinding {}",socketAddress);
- ServerSocketChannel channel = serverSocketChannels.get(socketAddress);
- if (channel == null) {
- throw new InvalidParameterException("localAddresses");
+ synchronized (this) {
+ ServerSocketChannel channel = serverSocketChannels.get(socketAddress);
+ if (channel == null) {
+ throw new InvalidParameterException("localAddresses");
+ }
+ channel.socket().close();
+ serverSocketChannels.remove(socketAddress);
}
- channel.socket().close();
}
}
Modified: mina/branches/3.0/core/src/test/java/org/apache/mina/transport/socket/nio/NioAcceptorTest.java
URL: http://svn.apache.org/viewvc/mina/branches/3.0/core/src/test/java/org/apache/mina/transport/socket/nio/NioAcceptorTest.java?rev=832341&r1=832340&r2=832341&view=diff
==============================================================================
--- mina/branches/3.0/core/src/test/java/org/apache/mina/transport/socket/nio/NioAcceptorTest.java (original)
+++ mina/branches/3.0/core/src/test/java/org/apache/mina/transport/socket/nio/NioAcceptorTest.java Tue Nov 3 08:33:20 2009
@@ -50,6 +50,7 @@
try {
// try to bind an already bound port
acceptor.bind(new InetSocketAddress(9999));
+
Assert.fail();
} catch (IOException e) {