Class NioChannel
java.lang.Object
org.apache.tomcat.util.net.NioChannel
- All Implemented Interfaces:
Closeable
,AutoCloseable
,ByteChannel
,Channel
,GatheringByteChannel
,ReadableByteChannel
,ScatteringByteChannel
,WritableByteChannel
- Direct Known Subclasses:
SecureNioChannel
public class NioChannel
extends Object
implements ByteChannel, ScatteringByteChannel, GatheringByteChannel
Base class for a SocketChannel wrapper used by the endpoint.
This way, logic for an SSL socket channel remains the same as for
a non SSL, making sure we don't need to code for any exception cases.
-
Field Summary
Modifier and TypeFieldDescriptionprotected final SocketBufferHandler
protected static final ByteBuffer
protected SocketChannel
protected static final StringManager
protected NioEndpoint.NioSocketWrapper
-
Constructor Summary
-
Method Summary
Modifier and TypeMethodDescriptionprotected void
This method should be used to check the interrupt status before attempting a write.void
close()
Closes this channel.void
close
(boolean force) Close the connection.boolean
Return true if the buffer wrote data.void
free()
Free the channel memoryprotected ApplicationBufferHandler
int
int
handshake
(boolean read, boolean write) Performs SSL handshake hence is a no-op for the non-secure implementation.boolean
boolean
boolean
isOpen()
Tells whether or not this channel is open.int
read
(ByteBuffer dst) Reads a sequence of bytes from this channel into the given buffer.long
read
(ByteBuffer[] dsts) long
read
(ByteBuffer[] dsts, int offset, int length) void
reset
(SocketChannel channel, NioEndpoint.NioSocketWrapper socketWrapper) Reset the channelvoid
toString()
int
write
(ByteBuffer src) Writes a sequence of bytes to this channel from the given buffer.long
write
(ByteBuffer[] srcs) long
write
(ByteBuffer[] srcs, int offset, int length)
-
Field Details
-
sm
-
emptyBuf
-
bufHandler
-
sc
-
socketWrapper
-
-
Constructor Details
-
NioChannel
-
-
Method Details
-
reset
public void reset(SocketChannel channel, NioEndpoint.NioSocketWrapper socketWrapper) throws IOException Reset the channel- Parameters:
channel
- the socket channelsocketWrapper
- the socket wrapper- Throws:
IOException
- If a problem was encountered resetting the channel
-
free
public void free()Free the channel memory -
close
Closes this channel.- Specified by:
close
in interfaceAutoCloseable
- Specified by:
close
in interfaceChannel
- Specified by:
close
in interfaceCloseable
- Throws:
IOException
- If an I/O error occurs
-
close
Close the connection.- Parameters:
force
- Should the underlying socket be forcibly closed?- Throws:
IOException
- If closing the secure channel fails.
-
isOpen
-
write
Writes a sequence of bytes to this channel from the given buffer.- Specified by:
write
in interfaceWritableByteChannel
- Parameters:
src
- The buffer from which bytes are to be retrieved- Returns:
- The number of bytes written, possibly zero
- Throws:
IOException
- If some other I/O error occurs
-
write
- Specified by:
write
in interfaceGatheringByteChannel
- Throws:
IOException
-
write
- Specified by:
write
in interfaceGatheringByteChannel
- Throws:
IOException
-
read
Reads a sequence of bytes from this channel into the given buffer.- Specified by:
read
in interfaceReadableByteChannel
- Parameters:
dst
- The buffer into which bytes are to be transferred- Returns:
- The number of bytes read, possibly zero, or
-1
if the channel has reached end-of-stream - Throws:
IOException
- If some other I/O error occurs
-
read
- Specified by:
read
in interfaceScatteringByteChannel
- Throws:
IOException
-
read
- Specified by:
read
in interfaceScatteringByteChannel
- Throws:
IOException
-
getBufHandler
-
getIOChannel
-
isClosing
public boolean isClosing() -
isHandshakeComplete
public boolean isHandshakeComplete() -
handshake
Performs SSL handshake hence is a no-op for the non-secure implementation.- Parameters:
read
- Unused in non-secure implementationwrite
- Unused in non-secure implementation- Returns:
- Always returns zero
- Throws:
IOException
- Never for non-secure channel
-
toString
-
getOutboundRemaining
public int getOutboundRemaining() -
flushOutbound
Return true if the buffer wrote data. NO-OP for non-secure channel.- Returns:
- Always returns
false
for non-secure channel - Throws:
IOException
- Never for non-secure channel
-
checkInterruptStatus
This method should be used to check the interrupt status before attempting a write. If a thread has been interrupted and the interrupt has not been cleared then an attempt to write to the socket will fail. When this happens the socket is removed from the poller without the socket being selected. This results in a connection limit leak for NIO as the endpoint expects the socket to be selected even in error conditions.- Throws:
IOException
- If the current thread was interrupted
-
setAppReadBufHandler
-
getAppReadBufHandler
-