Package org.apache.tomcat.util.net

## Class NioEndpoint

- java.lang.Object
- - org.apache.tomcat.util.net.AbstractEndpoint<S,​U>
  - - org.apache.tomcat.util.net.AbstractJsseEndpoint<NioChannel,​java.nio.channels.SocketChannel>
    - - org.apache.tomcat.util.net.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

### Nested Class Summary

Nested Classes
`static class` `NioEndpoint.NioSocketWrapper`
`class` `NioEndpoint.Poller` Poller class.
`static class` `NioEndpoint.PollerEvent` PollerEvent, cacheable object for poller events to avoid GC
`static class` `NioEndpoint.SendfileData` SendfileData class.
`protected class` `NioEndpoint.SocketProcessor` This class is the equivalent of the Worker, but will simply use in an external Executor thread pool.

### Nested classes/interfaces inherited from class org.apache.tomcat.util.net.AbstractEndpoint

`AbstractEndpoint.BindState, AbstractEndpoint.Handler<S>`

### Field Summary

Fields
`static int` `OP_REGISTER`

### Fields inherited from class org.apache.tomcat.util.net.AbstractEndpoint

`acceptor, acceptorThreadCount, acceptorThreadPriority, attributes, connections, internalExecutor, negotiableProtocols, paused, processorCache, running, sm, socketProperties, sslHostConfigs, threadPriority`

### Constructor Summary

Constructors
`NioEndpoint()`

### Method Summary

All Methods Instance Methods Concrete Methods Deprecated Methods
`void` `bind()` Initialize the endpoint.
`protected SocketProcessorBase<NioChannel>` `createSocketProcessor​(SocketWrapperBase<NioChannel> socketWrapper, SocketEvent event)`
`protected void` `destroySocket​(java.nio.channels.SocketChannel socket)` Close the socket.
`protected void` `doCloseServerSocket()` Actually close the server socket but don't perform any other clean-up.
`boolean` `getDeferAccept()` Is deferAccept supported?
`int` `getKeepAliveCount()` Number of keep-alive sockets.
`protected Log` `getLog()`
`protected Log` `getLogCertificate()`
`protected SynchronizedStack<NioChannel>` `getNioChannels()`
`protected NioEndpoint.Poller` `getPoller()`
`NioEndpoint.Poller` `getPoller0()` Deprecated. Will be removed in Tomcat 9.
`int` `getPollerThreadCount()` Deprecated. Will be removed in Tomcat 10.
`int` `getPollerThreadPriority()`
`long` `getSelectorTimeout()`
`protected java.nio.channels.NetworkChannel` `getServerSocket()`
`protected java.util.concurrent.CountDownLatch` `getStopLatch()`
`boolean` `getUseInheritedChannel()`
`protected void` `initServerSocket()`
`protected java.nio.channels.SocketChannel` `serverSocketAccept()`
`void` `setPollerThreadCount​(int pollerThreadCount)` Deprecated. Will be removed in Tomcat 10.
`void` `setPollerThreadPriority​(int pollerThreadPriority)`
`void` `setSelectorTimeout​(long timeout)`
`protected boolean` `setSocketOptions​(java.nio.channels.SocketChannel socket)` Process the specified connection.
`protected void` `setStopLatch​(java.util.concurrent.CountDownLatch stopLatch)`
`void` `setUseInheritedChannel​(boolean useInheritedChannel)`
`void` `startInternal()` Start the NIO endpoint, creating acceptor, poller threads.
`void` `stopInternal()` Stop the endpoint.
`void` `unbind()` Deallocate NIO memory pools, and close server socket.

### Methods inherited from class org.apache.tomcat.util.net.AbstractJsseEndpoint

`createSSLContext, createSSLEngine, getLocalAddress, getSniParseLimit, getSslImplementation, getSslImplementationName, init, initialiseSsl, isAlpnSupported, setSniParseLimit, setSslImplementationName`

### Methods inherited from class org.apache.tomcat.util.net.AbstractEndpoint

`addNegotiatedProtocol, addSslHostConfig, addSslHostConfig, awaitConnectionsClose, closeServerSocketGraceful, closeSocket, countDownConnection, countUpOrAwaitConnection, createExecutor, destroy, destroySsl, findSslHostConfigs, generateCertificateDebug, getAcceptCount, getAcceptorThreadCount, getAcceptorThreadPriority, getAddress, getAttribute, getBacklog, getBindOnInit, getBindState, getConnectionCount, getConnectionLinger, getConnections, getConnectionTimeout, getCurrentThreadCount, getCurrentThreadsBusy, getDaemon, getDefaultSSLHostConfigName, getDomain, getExecutor, getExecutorTerminationTimeoutMillis, getHandler, getKeepAliveTimeout, getLocalPort, getMaxConnections, getMaxHeaderCount, getMaxKeepAliveRequests, getMaxThreads, getMinSpareThreads, getName, getPort, getPortOffset, getPortWithOffset, getProperty, getSocketProperties, getSoLinger, getSoTimeout, getSSLHostConfig, getTcpNoDelay, getThreadPriority, getUseAsyncIO, getUseSendfile, hasNegotiableProtocols, initializeConnectionLatch, isPaused, isRunning, isSSLEnabled, logCertificate, pause, processSocket, releaseConnectionLatch, releaseSSLContext, reloadSslHostConfig, reloadSslHostConfigs, removeSslHostConfig, resume, setAcceptCount, setAcceptorThreadCount, setAcceptorThreadPriority, setAddress, setAttribute, setBacklog, setBindOnInit, setConnectionLinger, setConnectionTimeout, setDaemon, setDefaultSSLHostConfigName, setDomain, setExecutor, setExecutorTerminationTimeoutMillis, setHandler, setKeepAliveTimeout, setMaxConnections, setMaxHeaderCount, setMaxKeepAliveRequests, setMaxThreads, setMinSpareThreads, setName, setPort, setPortOffset, setProperty, setSoLinger, setSoTimeout, setSSLEnabled, setTcpNoDelay, setThreadPriority, setUseAsyncIO, setUseSendfile, shutdownExecutor, start, startAcceptorThread, stop, toTimeout, unlockAccept`

### Methods inherited from class java.lang.Object

`clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

### Field Detail

#### OP_REGISTER

    public static final int OP_REGISTER

See Also:
  Constant Field Values

### 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

#### getDeferAccept

    public boolean getDeferAccept()

Is deferAccept supported?

Specified by:
  `getDeferAccept` in class `AbstractEndpoint<NioChannel,​java.nio.channels.SocketChannel>`

#### 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

#### getNioChannels

    protected SynchronizedStack<NioChannel> getNioChannels()

#### getPoller

    protected NioEndpoint.Poller getPoller()

#### 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

#### getServerSocket

    protected java.nio.channels.NetworkChannel getServerSocket()

Specified by:
  `getServerSocket` in class `AbstractJsseEndpoint<NioChannel,​java.nio.channels.SocketChannel>`

#### 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`

#### getLog

    protected Log getLog()

Specified by:
  `getLog` in class `AbstractEndpoint<NioChannel,​java.nio.channels.SocketChannel>`

#### getLogCertificate

    protected Log getLogCertificate()

Overrides:
  `getLogCertificate` in class `AbstractEndpoint<NioChannel,​java.nio.channels.SocketChannel>`

#### createSocketProcessor

    protected SocketProcessorBase<NioChannel> createSocketProcessor​(SocketWrapperBase<NioChannel> socketWrapper,
                                                                    SocketEvent event)

Specified by:
  `createSocketProcessor` in class `AbstractEndpoint<NioChannel,​java.nio.channels.SocketChannel>`