Class ConnectionTable

  • All Implemented Interfaces:
    java.lang.Runnable

    public class ConnectionTable
    extends BasicConnectionTable
    implements java.lang.Runnable
    Manages incoming and outgoing TCP connections. For each outgoing message to destination P, if there is not yet a connection for P, one will be created. Subsequent outgoing messages will use this connection. For incoming messages, one server socket is created at startup. For each new incoming client connecting, a new thread from a thread pool is allocated and listens for incoming messages until the socket is closed by the peer.
    Sockets/threads with no activity will be killed after some time.

    Incoming messages from any of the sockets can be received by setting the message listener.

    Author:
    Bela Ban
    • Constructor Detail

      • ConnectionTable

        public ConnectionTable​(int srv_port)
                        throws java.lang.Exception
        Regular ConnectionTable without expiration of idle connections
        Parameters:
        srv_port - The port on which the server will listen. If this port is reserved, the next free port will be taken (incrementing srv_port).
        Throws:
        java.lang.Exception
      • ConnectionTable

        public ConnectionTable​(java.net.InetAddress bind_addr,
                               int srv_port)
                        throws java.lang.Exception
        Throws:
        java.lang.Exception
      • ConnectionTable

        public ConnectionTable​(int srv_port,
                               long reaper_interval,
                               long conn_expire_time)
                        throws java.lang.Exception
        ConnectionTable including a connection reaper. Connections that have been idle for more than conn_expire_time milliseconds will be closed and removed from the connection table. On next access they will be re-created.
        Parameters:
        srv_port - The port on which the server will listen
        reaper_interval - Number of milliseconds to wait for reaper between attepts to reap idle connections
        conn_expire_time - Number of milliseconds a connection can be idle (no traffic sent or received until it will be reaped
        Throws:
        java.lang.Exception
      • ConnectionTable

        public ConnectionTable​(BasicConnectionTable.Receiver r,
                               java.net.InetAddress bind_addr,
                               java.net.InetAddress external_addr,
                               int srv_port,
                               int max_port)
                        throws java.lang.Exception
        Throws:
        java.lang.Exception
      • ConnectionTable

        public ConnectionTable​(BasicConnectionTable.Receiver r,
                               java.net.InetAddress bind_addr,
                               java.net.InetAddress external_addr,
                               int srv_port,
                               int max_port,
                               PortsManager pm)
                        throws java.lang.Exception
        Create a ConnectionTable
        Parameters:
        r - A reference to a receiver of all messages received by this class. Method receive() will be called.
        bind_addr - The host name or IP address of the interface to which the server socket will bind. This is interesting only in multi-homed systems. If bind_addr is null, the server socket will bind to the first available interface (e.g. /dev/hme0 on Solaris or /dev/eth0 on Linux systems).
        external_addr - The address which will be broadcast to the group (the externally visible address which this host should be contacted on). If external_addr is null, it will default to the same address that the server socket is bound to.
        srv_port - The port to which the server socket will bind to. If this port is reserved, the next free port will be taken (incrementing srv_port).
        max_port - The largest port number that the server socket will be bound to. If max_port < srv_port then there is no limit.
        Throws:
        java.lang.Exception
      • ConnectionTable

        public ConnectionTable​(BasicConnectionTable.Receiver r,
                               java.net.InetAddress bind_addr,
                               java.net.InetAddress external_addr,
                               int srv_port,
                               int max_port,
                               long reaper_interval,
                               long conn_expire_time)
                        throws java.lang.Exception
        Throws:
        java.lang.Exception
      • ConnectionTable

        public ConnectionTable​(BasicConnectionTable.Receiver r,
                               java.net.InetAddress bind_addr,
                               java.net.InetAddress external_addr,
                               int srv_port,
                               int max_port,
                               long reaper_interval,
                               long conn_expire_time,
                               PortsManager pm)
                        throws java.lang.Exception
        ConnectionTable including a connection reaper. Connections that have been idle for more than conn_expire_time milliseconds will be closed and removed from the connection table. On next access they will be re-created.
        Parameters:
        r - The Receiver
        bind_addr - The host name or IP address of the interface to which the server socket will bind. This is interesting only in multi-homed systems. If bind_addr is null, the server socket will bind to the first available interface (e.g. /dev/hme0 on Solaris or /dev/eth0 on Linux systems).
        external_addr - The address which will be broadcast to the group (the externally visible address which this host should be contacted on). If external_addr is null, it will default to the same address that the server socket is bound to.
        srv_port - The port to which the server socket will bind to. If this port is reserved, the next free port will be taken (incrementing srv_port).
        max_port - The largest port number that the server socket will be bound to. If max_port < srv_port then there is no limit.
        reaper_interval - Number of milliseconds to wait for reaper between attepts to reap idle connections
        conn_expire_time - Number of milliseconds a connection can be idle (no traffic sent or received until it will be reaped
        Throws:
        java.lang.Exception
    • Method Detail

      • start

        public final void start()
                         throws java.lang.Exception
        Overrides:
        start in class BasicConnectionTable
        Throws:
        java.lang.Exception
      • init

        protected void init()
                     throws java.lang.Exception
        Throws:
        java.lang.Exception
      • run

        public void run()
        Acceptor thread. Continuously accept new connections. Create a new thread for each new connection and put it in conns. When the thread should stop, it is interrupted by the thread creator.
        Specified by:
        run in interface java.lang.Runnable
      • createServerSocket

        protected java.net.ServerSocket createServerSocket​(int start_port,
                                                           int end_port)
                                                    throws java.lang.Exception
        Finds first available port starting at start_port and returns server socket. Will not bind to port >end_port. Sets srv_port
        Throws:
        java.lang.Exception