1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 package org.apache.mina.io;
20
21 import java.io.IOException;
22 import java.net.SocketAddress;
23
24 /***
25 * Accepts incoming connection, communicates with clients, and fires events to
26 * {@link IoHandler}s.
27 * <p>
28 * Please refer to
29 * <a href="../../../../../xref-examples/org/apache/mina/examples/echoserver/Main.html">EchoServer</a>
30 * example.
31 * <p>
32 * You should bind to the desired socket address to accept incoming
33 * connections, and then events for incoming connections will be sent to
34 * the specified default {@link IoHandler}.
35 * <p>
36 * Threads accept incoming connections start automatically when
37 * {@link #bind(SocketAddress, IoHandler)} is invoked, and stop when all
38 * addresses are unbound.
39 *
40 * @author The Apache Directory Project (dev@directory.apache.org)
41 * @version $Rev: 332218 $, $Date: 2005-11-10 12:52:42 +0900 $
42 */
43 public interface IoAcceptor extends IoSessionManager
44 {
45 /***
46 * Binds to the specified <code>address</code> and handles incoming
47 * connections with the specified <code>handler</code>.
48 *
49 * @throws IOException if failed to bind
50 */
51 void bind( SocketAddress address, IoHandler handler ) throws IOException;
52
53 /***
54 * Unbinds from the specified <code>address</code>.
55 */
56 void unbind( SocketAddress address );
57
58 /***
59 * (Optional) Returns an {@link IoSession} that is bound to the specified
60 * <tt>localAddress</tt> and <tt>remoteAddress</tt> which reuses
61 * the <tt>localAddress</tt> that is already bound by {@link IoAcceptor}
62 * via {@link #bind(SocketAddress, IoHandler)}.
63 * <p>
64 * This operation is optional. Please throw {@link UnsupportedOperationException}
65 * if the transport type doesn't support this operation. This operation is
66 * usually implemented for connectionless transport types.
67 *
68 * @throws UnsupportedOperationException if this operation is not supported
69 * @throws IllegalArgumentException if the specified <tt>localAddress</tt> is
70 * not bound yet. (see {@link #bind(SocketAddress, IoHandler)})
71 */
72 IoSession newSession( SocketAddress remoteAddress, SocketAddress localAddress );
73 }