org.apache.tomcat.util.net

## Class JIoEndpoint

- java.lang.Object
- - org.apache.tomcat.util.net.AbstractEndpoint
  - - org.apache.tomcat.util.net.JIoEndpoint

    public class JIoEndpoint
    extends AbstractEndpoint

Handle incoming TCP connections. This class implement a simple server model: one listener thread accepts on a socket and creates a new worker thread for each incoming connection. More advanced Endpoints will reuse the threads, use queues, etc.

Author:
  James Duncan Davidson, Jason Hunter, James Todd, Costin Manolache, Gal Shachor, Yoav Shapira, Remy Maucherat

### Nested Class Summary

Nested Classes
`protected class` `JIoEndpoint.Acceptor` The background thread that listens for incoming TCP/IP connections and hands them off to an appropriate processor.
`protected class` `JIoEndpoint.AsyncTimeout` Async timeout thread
`static interface` `JIoEndpoint.Handler` Bare bones interface used for socket processing.
`protected class` `JIoEndpoint.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`

### Field Summary

Fields
`protected JIoEndpoint.Handler` `handler` Handling of accepted sockets.
`protected ServerSocket` `serverSocket` Associated server socket.
`protected ServerSocketFactory` `serverSocketFactory` Server socket factory.
`protected ConcurrentLinkedQueue<SocketWrapper<Socket>>` `waitingRequests`

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

`acceptors, acceptorThreadCount, acceptorThreadPriority, attributes, internalExecutor, paused, running, sm, socketProperties, threadPriority`

### Constructor Summary

Constructors
Constructor and Description
`JIoEndpoint()`

### Method Summary

Methods
`void` `bind()`
`protected AbstractEndpoint.Acceptor` `createAcceptor()` Hook to allow Endpoints to provide a specific Acceptor implementation.
`boolean` `getDeferAccept()`
`JIoEndpoint.Handler` `getHandler()`
`int` `getLocalPort()` Port in use.
`protected Log` `getLog()`
`ServerSocketFactory` `getServerSocketFactory()`
`boolean` `getUseComet()`
`boolean` `getUseCometTimeout()`
`boolean` `getUsePolling()`
`boolean` `getUseSendfile()`
`protected boolean` `processSocket(Socket socket)` Process a new connection from a new client.
`boolean` `processSocketAsync(SocketWrapper<Socket> socket, SocketStatus status)` Process an existing async connection.
`void` `setHandler(JIoEndpoint.Handler handler)`
`void` `setServerSocketFactory(ServerSocketFactory factory)`
`protected boolean` `setSocketOptions(Socket socket)` Configure the socket.
`void` `startInternal()`
`void` `stopInternal()`
`void` `unbind()` Deallocate APR memory pools, and close server socket.

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

`adjustRelativePath, countDownConnection, countUpOrAwaitConnection, createExecutor, destroy, getAcceptorThreadCount, getAcceptorThreadPriority, getAddress, getAlgorithm, getAllowUnsafeLegacyRenegotiation, getAttribute, getBacklog, getBindOnInit, getCiphers, getClientAuth, getConnectionCount, getCrlFile, getCurrentThreadCount, getCurrentThreadsBusy, getDaemon, getExecutor, getExecutorTerminationTimeoutMillis, getKeepAliveTimeout, getKeyAlias, getKeyPass, getKeystoreFile, getKeystorePass, getKeystoreProvider, getKeystoreType, getMaxConnections, getMaxHeaderCount, getMaxKeepAliveRequests, getMaxThreads, getMaxThreadsExecutor, getMinSpareThreads, getName, getPort, getProperty, getSessionCacheSize, getSessionTimeout, getSocketProperties, getSoLinger, getSoTimeout, getSslEnabledProtocolsArray, getSslProtocol, getTcpNoDelay, getThreadPriority, getTrustManagerClassName, getTrustMaxCertLength, getTruststoreAlgorithm, getTruststoreFile, getTruststorePass, getTruststoreProvider, getTruststoreType, handleExceptionWithDelay, init, initializeConnectionLatch, isPaused, isRunning, isSSLEnabled, pause, releaseConnectionLatch, resume, setAcceptorThreadCount, setAcceptorThreadPriority, setAddress, setAlgorithm, setAllowUnsafeLegacyRenegotiation, setAttribute, setBacklog, setBindOnInit, setCiphers, setClientAuth, setCrlFile, setDaemon, setExecutor, setExecutorTerminationTimeoutMillis, setKeepAliveTimeout, setKeyAlias, setKeyPass, setKeystoreFile, setKeystorePass, setKeystoreProvider, setKeystoreType, setMaxConnections, setMaxHeaderCount, setMaxKeepAliveRequests, setMaxThreads, setMinSpareThreads, setName, setPort, setProperty, setSessionCacheSize, setSessionTimeout, setSoLinger, setSoTimeout, setSSLEnabled, setSslEnabledProtocols, setSslProtocol, setTcpNoDelay, setThreadPriority, setTrustManagerClassName, setTrustMaxCertLength, setTruststoreAlgorithm, setTruststoreFile, setTruststorePass, setTruststoreProvider, setTruststoreType, shutdownExecutor, start, startAcceptorThreads, stop, unlockAccept`

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

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

### Field Detail

#### serverSocket

    protected ServerSocket serverSocket

Associated server socket.

#### handler

    protected JIoEndpoint.Handler handler

Handling of accepted sockets.

#### serverSocketFactory

    protected ServerSocketFactory serverSocketFactory

Server socket factory.

#### waitingRequests

    protected ConcurrentLinkedQueue<SocketWrapper<Socket>> waitingRequests

### Constructor Detail

#### JIoEndpoint

    public JIoEndpoint()

### Method Detail

#### setHandler

    public void setHandler(JIoEndpoint.Handler handler)

#### getHandler

    public JIoEndpoint.Handler getHandler()

#### setServerSocketFactory

    public void setServerSocketFactory(ServerSocketFactory factory)

#### getServerSocketFactory

    public ServerSocketFactory getServerSocketFactory()

#### getLocalPort

    public int getLocalPort()

Port in use.

Specified by:
  `getLocalPort` in class `AbstractEndpoint`

#### getUseSendfile

    public boolean getUseSendfile()

Specified by:
  `getUseSendfile` in class `AbstractEndpoint`

#### getUseComet

    public boolean getUseComet()

Specified by:
  `getUseComet` in class `AbstractEndpoint`

#### getUseCometTimeout

    public boolean getUseCometTimeout()

Specified by:
  `getUseCometTimeout` in class `AbstractEndpoint`

#### getDeferAccept

    public boolean getDeferAccept()

Specified by:
  `getDeferAccept` in class `AbstractEndpoint`

#### getUsePolling

    public boolean getUsePolling()

Specified by:
  `getUsePolling` in class `AbstractEndpoint`

#### bind

    public void bind()
              throws Exception

Specified by:
  `bind` in class `AbstractEndpoint`
Throws:
  `Exception`

#### startInternal

    public void startInternal()
                       throws Exception

Specified by:
  `startInternal` in class `AbstractEndpoint`
Throws:
  `Exception`

#### stopInternal

    public void stopInternal()

Specified by:
  `stopInternal` in class `AbstractEndpoint`

#### unbind

    public void unbind()
                throws Exception

Deallocate APR memory pools, and close server socket.

Specified by:
  `unbind` in class `AbstractEndpoint`
Throws:
  `Exception`

#### createAcceptor

    protected AbstractEndpoint.Acceptor createAcceptor()

Description copied from class: `AbstractEndpoint`
Hook to allow Endpoints to provide a specific Acceptor implementation.

Specified by:
  `createAcceptor` in class `AbstractEndpoint`

#### setSocketOptions

    protected boolean setSocketOptions(Socket socket)

Configure the socket.

#### processSocket

    protected boolean processSocket(Socket socket)

Process a new connection from a new client. Wraps the socket so keep-alive and other attributes can be tracked and then passes the socket to the executor for processing.

Parameters:
  `socket` - The socket associated with the client.
Returns:
  `true` if the socket is passed to the executor, `false` if something went wrong or if the endpoint is shutting down. Returning `false` is an indication to close the socket immediately.

#### processSocketAsync

    public boolean processSocketAsync(SocketWrapper<Socket> socket,
                             SocketStatus status)

Process an existing async connection. If processing is required, passes the wrapped socket to an executor for processing.

Parameters:
  `socket` - The socket associated with the client.
  `status` - Only OPEN and TIMEOUT are used. The others are used for Comet requests that are not supported by the BIO (JIO) Connector.
Returns:
  `true` if the socket is passed to the executor, `false` if something went wrong. Returning `false` is an indication to close the socket immediately.

#### getLog

    protected Log getLog()

Specified by:
  `getLog` in class `AbstractEndpoint`