1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 package org.apache.mina.transport.socket.nio;
21
22 import java.net.InetSocketAddress;
23 import java.util.Collection;
24 import java.util.concurrent.CountDownLatch;
25
26 import org.apache.mina.core.service.IoHandlerAdapter;
27 import org.apache.mina.util.AvailablePortFinder;
28 import org.junit.Test;
29
30 public class SocketAcceptorTest {
31
32 @Test
33 public void testBindTwice() throws Exception {
34 NioSocketAcceptor acceptor = new NioSocketAcceptor() {
35
36 private int nRequests;
37
38 private CountDownLatch secondRequestAdded = new CountDownLatch(1);
39
40 @Override
41 protected void bindRequestAdded() {
42 super.bindRequestAdded();
43 nRequests++;
44 if (nRequests == 2) {
45 secondRequestAdded.countDown();
46 }
47 }
48
49 @Override
50 protected void handleUnbound(Collection<AcceptorOperationFuture> unboundFutures) throws Exception {
51 super.handleUnbound(unboundFutures);
52 if (!unboundFutures.isEmpty() && nRequests == 1) {
53 secondRequestAdded.await();
54 }
55 }
56 };
57 acceptor.setCloseOnDeactivation(false);
58 acceptor.setReuseAddress(true);
59 acceptor.setHandler(new IoHandlerAdapter());
60 try {
61 int port = AvailablePortFinder.getNextAvailable(1025);
62 InetSocketAddress address = new InetSocketAddress("127.0.0.1", port);
63 acceptor.bind(address);
64 acceptor.unbind(address);
65 acceptor.bind(address);
66 acceptor.unbind(address);
67 } finally {
68 acceptor.dispose();
69 }
70 }
71 }