Class AbstractEpollStreamChannel
java.lang.Object
io.netty.util.DefaultAttributeMap
io.netty.channel.AbstractChannel
io.netty.channel.epoll.AbstractEpollChannel
io.netty.channel.epoll.AbstractEpollStreamChannel
- All Implemented Interfaces:
Channel, ChannelOutboundInvoker, DuplexChannel, UnixChannel, AttributeMap, Comparable<Channel>
- Direct Known Subclasses:
EpollDomainSocketChannel, EpollSocketChannel
public abstract class AbstractEpollStreamChannel
extends AbstractEpollChannel
implements DuplexChannel
-
Nested Class Summary
Nested ClassesModifier and TypeClassDescriptionprivate final class(package private) classprivate final classprivate final classprotected classprivate final classNested classes/interfaces inherited from class AbstractEpollChannel
AbstractEpollChannel.AbstractEpollUnsafeNested classes/interfaces inherited from class AbstractChannel
AbstractChannel.AbstractUnsafeNested classes/interfaces inherited from interface Channel
Channel.Unsafe -
Field Summary
FieldsModifier and TypeFieldDescriptionprivate WritableByteChannelprivate static final Stringprivate final Runnableprivate static final InternalLoggerprivate static final ChannelMetadataprivate FileDescriptorprivate FileDescriptorFields inherited from class AbstractEpollChannel
active, epollInReadyRunnablePending, flags, inputClosedSeenErrorOnRead, socket -
Constructor Summary
ConstructorsModifierConstructorDescriptionprotectedAbstractEpollStreamChannel(int fd) protectedAbstractEpollStreamChannel(Channel parent, int fd) (package private)AbstractEpollStreamChannel(Channel parent, LinuxSocket fd) protectedAbstractEpollStreamChannel(Channel parent, LinuxSocket fd, SocketAddress remote) (package private)protectedAbstractEpollStreamChannel(LinuxSocket fd, boolean active) -
Method Summary
Modifier and TypeMethodDescriptionprivate voidprivate voidadjustMaxBytesPerGatheringWrite(long attempted, long written, long oldMaxBytesPerGatheringWrite) private voidclearSpliceQueue(ClosedChannelException exception) protected voiddoClose()Close theChannelprotected final voidCalled when conditions justify shutting down the output portion of the channel.protected voidFlush the content of the given buffer to the remote peer.private intAttempt to write multipleByteBufobjects.protected intAttempt to write a single object.private voidfailSpliceIfClosed(ChannelPromise promise) protected ObjectInvoked when a new message is added to aChannelOutboundBufferof thisAbstractChannel, so that theChannelimplementation converts the message to another.booleanReturnstrueif and only if the remote peer shut down its output so that no more data is received from this channel.booleanbooleanDetermine if both the input and output of this channel have been shutdown.metadata()protected AbstractEpollChannel.AbstractEpollUnsafeCreate a newAbstractChannel.AbstractUnsafeinstance which will be used for the life-time of theChannelprivate static voidshutdown()Will shutdown the input and output sides of this channel.shutdown(ChannelPromise promise) Will shutdown the input and output sides of this channel.private static voidshutdownDone(ChannelFuture shutdownOutputFuture, ChannelFuture shutdownInputFuture, ChannelPromise promise) shutdownInput(ChannelPromise promise) Will shutdown the input and notifyChannelPromise.private voidshutdownInput0(ChannelPromise promise) shutdownOutput(ChannelPromise promise) Will shutdown the output and notifyChannelPromise.private voidshutdownOutputDone(ChannelFuture shutdownOutputFuture, ChannelPromise promise) final ChannelFuturespliceTo(AbstractEpollStreamChannel ch, int len) Deprecated.Will be removed in the future.final ChannelFuturespliceTo(AbstractEpollStreamChannel ch, int len, ChannelPromise promise) Deprecated.will be removed in the future.final ChannelFuturespliceTo(FileDescriptor ch, int offset, int len) Deprecated.Will be removed in the future.final ChannelFuturespliceTo(FileDescriptor ch, int offset, int len, ChannelPromise promise) Deprecated.Will be removed in the future.private intwriteBytes(ChannelOutboundBuffer in, ByteBuf buf) private intwriteBytesMultiple(ChannelOutboundBuffer in, IovArray array) Write multiple bytes viaIovArray.private intwriteBytesMultiple(ChannelOutboundBuffer in, ByteBuffer[] nioBuffers, int nioBufferCnt, long expectedWrittenBytes, long maxBytesPerGatheringWrite) Write multiple bytes viaByteBufferarray.private intWrite aDefaultFileRegionprivate intwriteFileRegion(ChannelOutboundBuffer in, FileRegion region) Write aFileRegionMethods inherited from class AbstractEpollChannel
checkResolvable, clearEpollIn, clearFlag, config, doBeginRead, doBind, doConnect, doConnect0, doDeregister, doDisconnect, doReadBytes, doRegister, doWriteBytes, doWriteOrSendBytes, fd, isActive, isCompatible, isFlagSet, isOpen, isSoErrorZero, localAddress0, newDirectBuffer, newDirectBuffer, remoteAddress0, resetCachedAddresses, setFlag, shouldBreakEpollInReadyMethods inherited from class AbstractChannel
alloc, bind, bind, bytesBeforeUnwritable, bytesBeforeWritable, close, close, closeFuture, compareTo, connect, connect, connect, connect, deregister, deregister, disconnect, disconnect, equals, eventLoop, flush, hashCode, id, invalidateLocalAddress, invalidateRemoteAddress, isRegistered, isWritable, localAddress, maxMessagesPerWrite, newChannelPipeline, newFailedFuture, newId, newProgressivePromise, newPromise, newSucceededFuture, parent, pipeline, read, remoteAddress, toString, unsafe, validateFileRegion, voidPromise, write, write, writeAndFlush, writeAndFlushMethods inherited from class DefaultAttributeMap
attr, hasAttrMethods inherited from interface AttributeMap
attr, hasAttrMethods inherited from interface Channel
alloc, bytesBeforeUnwritable, bytesBeforeWritable, closeFuture, config, eventLoop, flush, id, isActive, isOpen, isRegistered, isWritable, localAddress, parent, pipeline, read, remoteAddress, unsafeMethods inherited from interface ChannelOutboundInvoker
bind, bind, close, close, connect, connect, connect, connect, deregister, deregister, disconnect, disconnect, newFailedFuture, newProgressivePromise, newPromise, newSucceededFuture, voidPromise, write, write, writeAndFlush, writeAndFlushMethods inherited from interface Comparable
compareTo
-
Field Details
-
METADATA
-
EXPECTED_TYPES
-
logger
-
flushTask
-
spliceQueue
-
pipeIn
-
pipeOut
-
byteChannel
-
-
Constructor Details
-
AbstractEpollStreamChannel
-
AbstractEpollStreamChannel
protected AbstractEpollStreamChannel(int fd) -
AbstractEpollStreamChannel
AbstractEpollStreamChannel(LinuxSocket fd) -
AbstractEpollStreamChannel
AbstractEpollStreamChannel(Channel parent, LinuxSocket fd) -
AbstractEpollStreamChannel
-
AbstractEpollStreamChannel
-
-
Method Details
-
newUnsafe
Description copied from class:AbstractChannelCreate a newAbstractChannel.AbstractUnsafeinstance which will be used for the life-time of theChannel- Specified by:
newUnsafein classAbstractEpollChannel
-
metadata
Description copied from interface:Channel- Specified by:
metadatain interfaceChannel- Overrides:
metadatain classAbstractEpollChannel
-
spliceTo
Deprecated.Will be removed in the future.Splice from thisAbstractEpollStreamChannelto anotherAbstractEpollStreamChannel. Thelenis the number of bytes to splice. If usingInteger.MAX_VALUEit will splice until theChannelFuturewas canceled or it was failed. Please note:- both channels need to be registered to the same
EventLoop, otherwise anIllegalArgumentExceptionis thrown. EpollChannelConfig.getEpollMode()must beEpollMode.LEVEL_TRIGGEREDfor this and the targetAbstractEpollStreamChannel
- both channels need to be registered to the same
-
spliceTo
@Deprecated public final ChannelFuture spliceTo(AbstractEpollStreamChannel ch, int len, ChannelPromise promise) Deprecated.will be removed in the future.Splice from thisAbstractEpollStreamChannelto anotherAbstractEpollStreamChannel. Thelenis the number of bytes to splice. If usingInteger.MAX_VALUEit will splice until theChannelFuturewas canceled or it was failed. Please note:- both channels need to be registered to the same
EventLoop, otherwise anIllegalArgumentExceptionis thrown. EpollChannelConfig.getEpollMode()must beEpollMode.LEVEL_TRIGGEREDfor this and the targetAbstractEpollStreamChannel
- both channels need to be registered to the same
-
spliceTo
Deprecated.Will be removed in the future.Splice from thisAbstractEpollStreamChannelto anotherFileDescriptor. Theoffsetis the offset for theFileDescriptorandlenis the number of bytes to splice. If usingInteger.MAX_VALUEit will splice until theChannelFuturewas canceled or it was failed. Please note:EpollChannelConfig.getEpollMode()must beEpollMode.LEVEL_TRIGGEREDfor thisAbstractEpollStreamChannel- the
FileDescriptorwill not be closed after theChannelFutureis notified - this channel must be registered to an event loop or
IllegalStateExceptionwill be thrown.
-
spliceTo
@Deprecated public final ChannelFuture spliceTo(FileDescriptor ch, int offset, int len, ChannelPromise promise) Deprecated.Will be removed in the future.Splice from thisAbstractEpollStreamChannelto anotherFileDescriptor. Theoffsetis the offset for theFileDescriptorandlenis the number of bytes to splice. If usingInteger.MAX_VALUEit will splice until theChannelFuturewas canceled or it was failed. Please note:EpollChannelConfig.getEpollMode()must beEpollMode.LEVEL_TRIGGEREDfor thisAbstractEpollStreamChannel- the
FileDescriptorwill not be closed after theChannelPromiseis notified - this channel must be registered to an event loop or
IllegalStateExceptionwill be thrown.
-
failSpliceIfClosed
-
writeBytes
- Parameters:
in- the collection which contains objects to write.buf- theByteBuffrom which the bytes should be written- Returns:
- The value that should be decremented from the write quantum which starts at
ChannelConfig.getWriteSpinCount(). The typical use cases are as follows:- 0 - if no write was attempted. This is appropriate if an empty
ByteBuf(or other empty content) is encountered - 1 - if a single call to write data was made to the OS
ChannelUtils.WRITE_STATUS_SNDBUF_FULL- if an attempt to write data was made to the OS, but no data was accepted
- 0 - if no write was attempted. This is appropriate if an empty
- Throws:
Exception
-
adjustMaxBytesPerGatheringWrite
private void adjustMaxBytesPerGatheringWrite(long attempted, long written, long oldMaxBytesPerGatheringWrite) -
writeBytesMultiple
Write multiple bytes viaIovArray.- Parameters:
in- the collection which contains objects to write.array- The array which contains the content to write.- Returns:
- The value that should be decremented from the write quantum which starts at
ChannelConfig.getWriteSpinCount(). The typical use cases are as follows:- 0 - if no write was attempted. This is appropriate if an empty
ByteBuf(or other empty content) is encountered - 1 - if a single call to write data was made to the OS
ChannelUtils.WRITE_STATUS_SNDBUF_FULL- if an attempt to write data was made to the OS, but no data was accepted
- 0 - if no write was attempted. This is appropriate if an empty
- Throws:
IOException- If an I/O exception occurs during write.
-
writeBytesMultiple
private int writeBytesMultiple(ChannelOutboundBuffer in, ByteBuffer[] nioBuffers, int nioBufferCnt, long expectedWrittenBytes, long maxBytesPerGatheringWrite) throws IOException Write multiple bytes viaByteBufferarray.- Parameters:
in- the collection which contains objects to write.nioBuffers- The buffers to write.nioBufferCnt- The number of buffers to write.expectedWrittenBytes- The number of bytes we expect to write.maxBytesPerGatheringWrite- The maximum number of bytes we should attempt to write.- Returns:
- The value that should be decremented from the write quantum which starts at
ChannelConfig.getWriteSpinCount(). The typical use cases are as follows:- 0 - if no write was attempted. This is appropriate if an empty
ByteBuf(or other empty content) is encountered - 1 - if a single call to write data was made to the OS
ChannelUtils.WRITE_STATUS_SNDBUF_FULL- if an attempt to write data was made to the OS, but no data was accepted
- 0 - if no write was attempted. This is appropriate if an empty
- Throws:
IOException- If an I/O exception occurs during write.
-
writeDefaultFileRegion
private int writeDefaultFileRegion(ChannelOutboundBuffer in, DefaultFileRegion region) throws Exception Write aDefaultFileRegion- Parameters:
in- the collection which contains objects to write.region- theDefaultFileRegionfrom which the bytes should be written- Returns:
- The value that should be decremented from the write quantum which starts at
ChannelConfig.getWriteSpinCount(). The typical use cases are as follows:- 0 - if no write was attempted. This is appropriate if an empty
ByteBuf(or other empty content) is encountered - 1 - if a single call to write data was made to the OS
ChannelUtils.WRITE_STATUS_SNDBUF_FULL- if an attempt to write data was made to the OS, but no data was accepted
- 0 - if no write was attempted. This is appropriate if an empty
- Throws:
Exception
-
writeFileRegion
Write aFileRegion- Parameters:
in- the collection which contains objects to write.region- theFileRegionfrom which the bytes should be written- Returns:
- The value that should be decremented from the write quantum which starts at
ChannelConfig.getWriteSpinCount(). The typical use cases are as follows:- 0 - if no write was attempted. This is appropriate if an empty
ByteBuf(or other empty content) is encountered - 1 - if a single call to write data was made to the OS
ChannelUtils.WRITE_STATUS_SNDBUF_FULL- if an attempt to write data was made to the OS, but no data was accepted
- 0 - if no write was attempted. This is appropriate if an empty
- Throws:
Exception
-
doWrite
Description copied from class:AbstractChannelFlush the content of the given buffer to the remote peer.- Specified by:
doWritein classAbstractChannel- Throws:
Exception
-
doWriteSingle
Attempt to write a single object.- Parameters:
in- the collection which contains objects to write.- Returns:
- The value that should be decremented from the write quantum which starts at
ChannelConfig.getWriteSpinCount(). The typical use cases are as follows:- 0 - if no write was attempted. This is appropriate if an empty
ByteBuf(or other empty content) is encountered - 1 - if a single call to write data was made to the OS
ChannelUtils.WRITE_STATUS_SNDBUF_FULL- if an attempt to write data was made to the OS, but no data was accepted
- 0 - if no write was attempted. This is appropriate if an empty
- Throws:
Exception- If an I/O error occurs.
-
doWriteMultiple
Attempt to write multipleByteBufobjects.- Parameters:
in- the collection which contains objects to write.- Returns:
- The value that should be decremented from the write quantum which starts at
ChannelConfig.getWriteSpinCount(). The typical use cases are as follows:- 0 - if no write was attempted. This is appropriate if an empty
ByteBuf(or other empty content) is encountered - 1 - if a single call to write data was made to the OS
ChannelUtils.WRITE_STATUS_SNDBUF_FULL- if an attempt to write data was made to the OS, but no data was accepted
- 0 - if no write was attempted. This is appropriate if an empty
- Throws:
Exception- If an I/O error occurs.
-
filterOutboundMessage
Description copied from class:AbstractChannelInvoked when a new message is added to aChannelOutboundBufferof thisAbstractChannel, so that theChannelimplementation converts the message to another. (e.g. heap buffer -> direct buffer)- Overrides:
filterOutboundMessagein classAbstractChannel
-
doShutdownOutput
Description copied from class:AbstractChannelCalled when conditions justify shutting down the output portion of the channel. This may happen if a write operation throws an exception.- Overrides:
doShutdownOutputin classAbstractChannel- Throws:
Exception
-
shutdownInput0
-
isOutputShutdown
public boolean isOutputShutdown()- Specified by:
isOutputShutdownin interfaceDuplexChannel- See Also:
-
isInputShutdown
public boolean isInputShutdown()Description copied from interface:DuplexChannelReturnstrueif and only if the remote peer shut down its output so that no more data is received from this channel. Note that the semantic of this method is different from that ofSocket.shutdownInput()andSocket.isInputShutdown().- Specified by:
isInputShutdownin interfaceDuplexChannel
-
isShutdown
public boolean isShutdown()Description copied from interface:DuplexChannelDetermine if both the input and output of this channel have been shutdown.- Specified by:
isShutdownin interfaceDuplexChannel
-
shutdownOutput
- Specified by:
shutdownOutputin interfaceDuplexChannel- See Also:
-
shutdownOutput
Description copied from interface:DuplexChannelWill shutdown the output and notifyChannelPromise.- Specified by:
shutdownOutputin interfaceDuplexChannel- See Also:
-
shutdownInput
- Specified by:
shutdownInputin interfaceDuplexChannel- See Also:
-
shutdownInput
Description copied from interface:DuplexChannelWill shutdown the input and notifyChannelPromise.- Specified by:
shutdownInputin interfaceDuplexChannel- See Also:
-
shutdown
Description copied from interface:DuplexChannelWill shutdown the input and output sides of this channel.- Specified by:
shutdownin interfaceDuplexChannel- Returns:
- will be completed when both shutdown operations complete.
-
shutdown
Description copied from interface:DuplexChannelWill shutdown the input and output sides of this channel.- Specified by:
shutdownin interfaceDuplexChannel- Parameters:
promise- will be completed when both shutdown operations complete.- Returns:
- will be completed when both shutdown operations complete.
-
shutdownOutputDone
-
shutdownDone
private static void shutdownDone(ChannelFuture shutdownOutputFuture, ChannelFuture shutdownInputFuture, ChannelPromise promise) -
doClose
Description copied from class:AbstractChannelClose theChannel- Overrides:
doClosein classAbstractEpollChannel- Throws:
Exception
-
clearSpliceQueue
-
safeClosePipe
-
addToSpliceQueue
-