Class NioEndpoint


  • public class NioEndpoint
    extends AbstractJsseEndpoint<NioChannel,​java.nio.channels.SocketChannel>
    NIO tailored thread pool, providing the following services:
    • Socket acceptor thread
    • Socket poller thread
    • Worker threads pool
    TODO: Consider using the virtual machine's thread pool.
    Author:
    Mladen Turk, Remy Maucherat
    • Constructor Detail

      • NioEndpoint

        public NioEndpoint()
    • Method Detail

      • setUseInheritedChannel

        public void setUseInheritedChannel​(boolean useInheritedChannel)
      • getUseInheritedChannel

        public boolean getUseInheritedChannel()
      • setPollerThreadPriority

        public void setPollerThreadPriority​(int pollerThreadPriority)
      • getPollerThreadPriority

        public int getPollerThreadPriority()
      • setPollerThreadCount

        @Deprecated
        public void setPollerThreadCount​(int pollerThreadCount)
        Deprecated.
        Will be removed in Tomcat 10.
        NO-OP.
        Parameters:
        pollerThreadCount - Unused
      • getPollerThreadCount

        @Deprecated
        public int getPollerThreadCount()
        Deprecated.
        Will be removed in Tomcat 10.
        Always returns 1.
        Returns:
        Always 1.
      • setSelectorTimeout

        public void setSelectorTimeout​(long timeout)
      • getSelectorTimeout

        public long getSelectorTimeout()
      • getPoller0

        @Deprecated
        public NioEndpoint.Poller getPoller0()
        Deprecated.
        Will be removed in Tomcat 9.
        Not used.
        Returns:
        The poller
      • getKeepAliveCount

        public int getKeepAliveCount()
        Number of keep-alive sockets.
        Returns:
        The number of sockets currently in the keep-alive state waiting for the next request to be received on the socket
      • bind

        public void bind()
                  throws java.lang.Exception
        Initialize the endpoint.
        Specified by:
        bind in class AbstractEndpoint<NioChannel,​java.nio.channels.SocketChannel>
        Throws:
        java.lang.Exception
      • initServerSocket

        protected void initServerSocket()
                                 throws java.lang.Exception
        Throws:
        java.lang.Exception
      • startInternal

        public void startInternal()
                           throws java.lang.Exception
        Start the NIO endpoint, creating acceptor, poller threads.
        Specified by:
        startInternal in class AbstractEndpoint<NioChannel,​java.nio.channels.SocketChannel>
        Throws:
        java.lang.Exception
      • stopInternal

        public void stopInternal()
        Stop the endpoint. This will cause all processing threads to stop.
        Specified by:
        stopInternal in class AbstractEndpoint<NioChannel,​java.nio.channels.SocketChannel>
      • unbind

        public void unbind()
                    throws java.lang.Exception
        Deallocate NIO memory pools, and close server socket.
        Overrides:
        unbind in class AbstractJsseEndpoint<NioChannel,​java.nio.channels.SocketChannel>
        Throws:
        java.lang.Exception
      • doCloseServerSocket

        protected void doCloseServerSocket()
                                    throws java.io.IOException
        Description copied from class: AbstractEndpoint
        Actually close the server socket but don't perform any other clean-up.
        Specified by:
        doCloseServerSocket in class AbstractEndpoint<NioChannel,​java.nio.channels.SocketChannel>
        Throws:
        java.io.IOException - If an error occurs closing the socket
      • getStopLatch

        protected java.util.concurrent.CountDownLatch getStopLatch()
      • setStopLatch

        protected void setStopLatch​(java.util.concurrent.CountDownLatch stopLatch)
      • setSocketOptions

        protected boolean setSocketOptions​(java.nio.channels.SocketChannel socket)
        Process the specified connection.
        Specified by:
        setSocketOptions in class AbstractEndpoint<NioChannel,​java.nio.channels.SocketChannel>
        Parameters:
        socket - The socket channel
        Returns:
        true if the socket was correctly configured and processing may continue, false if the socket needs to be close immediately
      • destroySocket

        protected void destroySocket​(java.nio.channels.SocketChannel socket)
        Description copied from class: AbstractEndpoint
        Close the socket. This is used when the connector is not in a state which allows processing the socket, or if there was an error which prevented the allocation of the socket wrapper.
        Specified by:
        destroySocket in class AbstractEndpoint<NioChannel,​java.nio.channels.SocketChannel>
        Parameters:
        socket - The newly accepted socket
      • serverSocketAccept

        protected java.nio.channels.SocketChannel serverSocketAccept()
                                                              throws java.lang.Exception
        Specified by:
        serverSocketAccept in class AbstractEndpoint<NioChannel,​java.nio.channels.SocketChannel>
        Throws:
        java.lang.Exception