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,​SocketChannel>
    - - org.apache.tomcat.util.net.NioEndpoint

    public class NioEndpoint
    extends AbstractJsseEndpoint<NioChannel,​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, acceptorThreadPriority, attributes, connections, internalExecutor, negotiableProtocols, paused, processorCache, running, sm, socketProperties, sslHostConfigs, threadPriority`

### Constructor Summary

Constructors
`NioEndpoint()`

### Method Summary

All Methods Instance Methods Concrete Methods
`void` `bind()` Initialize the endpoint.
`protected SocketProcessorBase<NioChannel>` `createSocketProcessor​(SocketWrapperBase<NioChannel> socketWrapper, SocketEvent event)`
`protected void` `destroySocket​(SocketChannel socket)` Close the socket.
`protected void` `doCloseServerSocket()` Actually close the server socket but don't perform any other clean-up.
`String` `getId()` The default behavior is to identify connectors uniquely with address and port.
`int` `getKeepAliveCount()` Number of keep-alive sockets.
`protected Log` `getLog()`
`protected Log` `getLogCertificate()`
`protected SynchronizedStack<NioChannel>` `getNioChannels()`
`protected NioEndpoint.Poller` `getPoller()`
`int` `getPollerThreadPriority()`
`long` `getSelectorTimeout()`
`protected NetworkChannel` `getServerSocket()`
`protected CountDownLatch` `getStopLatch()`
`String` `getUnixDomainSocketPath()`
`String` `getUnixDomainSocketPathPermissions()`
`boolean` `getUseInheritedChannel()`
`protected void` `initServerSocket()`
`protected SocketChannel` `serverSocketAccept()`
`void` `setPollerThreadPriority​(int pollerThreadPriority)`
`void` `setSelectorTimeout​(long timeout)`
`protected boolean` `setSocketOptions​(SocketChannel socket)` Process the specified connection.
`protected void` `setStopLatch​(CountDownLatch stopLatch)`
`void` `setUnixDomainSocketPath​(String unixDomainSocketPath)`
`void` `setUnixDomainSocketPathPermissions​(String unixDomainSocketPathPermissions)`
`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.
`protected void` `unlockAccept()` Unlock the server socket acceptor threads using bogus connections.

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

`createSSLContext, createSSLEngine, getLocalAddress, getSniParseLimit, getSslImplementation, getSslImplementationName, initialiseSsl, 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, getAcceptorThreadPriority, getAddress, getAttribute, getBindOnInit, getBindState, getConnectionCount, getConnectionLinger, getConnections, getConnectionTimeout, getCurrentThreadCount, getCurrentThreadsBusy, getDaemon, getDefaultSSLHostConfigName, getDeferAccept, getDomain, getExecutor, getExecutorTerminationTimeoutMillis, getHandler, getKeepAliveTimeout, getLocalPort, getMaxConnections, getMaxKeepAliveRequests, getMaxThreads, getMinSpareThreads, getName, getPort, getPortOffset, getPortWithOffset, getProperty, getSocketProperties, getSSLHostConfig, getTcpNoDelay, getThreadPriority, getUseAsyncIO, getUseSendfile, getUtilityExecutor, hasNegotiableProtocols, init, initializeConnectionLatch, isPaused, isRunning, isSSLEnabled, logCertificate, pause, processSocket, releaseSSLContext, reloadSslHostConfig, reloadSslHostConfigs, removeSslHostConfig, resume, setAcceptCount, setAcceptorThreadPriority, setAddress, setAttribute, setBindOnInit, setConnectionLinger, setConnectionTimeout, setDaemon, setDefaultSSLHostConfigName, setDomain, setExecutor, setExecutorTerminationTimeoutMillis, setHandler, setKeepAliveTimeout, setMaxConnections, setMaxKeepAliveRequests, setMaxThreads, setMinSpareThreads, setName, setPort, setPortOffset, setProperty, setSSLEnabled, setTcpNoDelay, setThreadPriority, setUseAsyncIO, setUseSendfile, setUtilityExecutor, shutdownExecutor, start, startAcceptorThread, stop, toTimeout`

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

#### getUnixDomainSocketPath

    public String getUnixDomainSocketPath()

#### setUnixDomainSocketPath

    public void setUnixDomainSocketPath​(String unixDomainSocketPath)

#### getUnixDomainSocketPathPermissions

    public String getUnixDomainSocketPathPermissions()

#### setUnixDomainSocketPathPermissions

    public void setUnixDomainSocketPathPermissions​(String unixDomainSocketPathPermissions)

#### setPollerThreadPriority

    public void setPollerThreadPriority​(int pollerThreadPriority)

#### getPollerThreadPriority

    public int getPollerThreadPriority()

#### setSelectorTimeout

    public void setSelectorTimeout​(long timeout)

#### getSelectorTimeout

    public long getSelectorTimeout()

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

#### getId

    public String getId()

Description copied from class: `AbstractEndpoint`
The default behavior is to identify connectors uniquely with address and port. However, certain connectors are not using that and need some other identifier, which then can be used as a replacement.

Overrides:
  `getId` in class `AbstractEndpoint<NioChannel,​SocketChannel>`
Returns:
  the id

#### bind

    public void bind()
              throws Exception

Initialize the endpoint.

Specified by:
  `bind` in class `AbstractEndpoint<NioChannel,​SocketChannel>`
Throws:
  `Exception`

#### initServerSocket

    protected void initServerSocket()
                             throws Exception

Throws:
  `Exception`

#### startInternal

    public void startInternal()
                       throws Exception

Start the NIO endpoint, creating acceptor, poller threads.

Specified by:
  `startInternal` in class `AbstractEndpoint<NioChannel,​SocketChannel>`
Throws:
  `Exception`

#### stopInternal

    public void stopInternal()

Stop the endpoint. This will cause all processing threads to stop.

Specified by:
  `stopInternal` in class `AbstractEndpoint<NioChannel,​SocketChannel>`

#### unbind

    public void unbind()
                throws Exception

Deallocate NIO memory pools, and close server socket.

Overrides:
  `unbind` in class `AbstractJsseEndpoint<NioChannel,​SocketChannel>`
Throws:
  `Exception`

#### doCloseServerSocket

    protected void doCloseServerSocket()
                                throws 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,​SocketChannel>`
Throws:
  `IOException` - If an error occurs closing the socket

#### unlockAccept

    protected void unlockAccept()

Description copied from class: `AbstractEndpoint`
Unlock the server socket acceptor threads using bogus connections.

Overrides:
  `unlockAccept` in class `AbstractEndpoint<NioChannel,​SocketChannel>`

#### getNioChannels

    protected SynchronizedStack<NioChannel> getNioChannels()

#### getPoller

    protected NioEndpoint.Poller getPoller()

#### getStopLatch

    protected CountDownLatch getStopLatch()

#### setStopLatch

    protected void setStopLatch​(CountDownLatch stopLatch)

#### setSocketOptions

    protected boolean setSocketOptions​(SocketChannel socket)

Process the specified connection.

Specified by:
  `setSocketOptions` in class `AbstractEndpoint<NioChannel,​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​(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,​SocketChannel>`
Parameters:
  `socket` - The newly accepted socket

#### getServerSocket

    protected NetworkChannel getServerSocket()

Specified by:
  `getServerSocket` in class `AbstractJsseEndpoint<NioChannel,​SocketChannel>`

#### serverSocketAccept

    protected SocketChannel serverSocketAccept()
                                        throws Exception

Specified by:
  `serverSocketAccept` in class `AbstractEndpoint<NioChannel,​SocketChannel>`
Throws:
  `Exception`

#### getLog

    protected Log getLog()

Specified by:
  `getLog` in class `AbstractEndpoint<NioChannel,​SocketChannel>`

#### getLogCertificate

    protected Log getLogCertificate()

Overrides:
  `getLogCertificate` in class `AbstractEndpoint<NioChannel,​SocketChannel>`

#### createSocketProcessor

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

Specified by:
  `createSocketProcessor` in class `AbstractEndpoint<NioChannel,​SocketChannel>`