Class AbstractKQueueStreamChannel

All Implemented Interfaces:
Channel, ChannelOutboundInvoker, DuplexChannel, UnixChannel, AttributeMap, java.lang.Comparable<Channel>
Direct Known Subclasses:
KQueueDomainSocketChannel, KQueueSocketChannel

public abstract class AbstractKQueueStreamChannel extends AbstractKQueueChannel implements DuplexChannel
  • Field Details

    • logger

      private static final InternalLogger logger
    • METADATA

      private static final ChannelMetadata METADATA
    • EXPECTED_TYPES

      private static final java.lang.String EXPECTED_TYPES
    • byteChannel

      private java.nio.channels.WritableByteChannel byteChannel
    • flushTask

      private final java.lang.Runnable flushTask
  • Constructor Details

    • AbstractKQueueStreamChannel

      AbstractKQueueStreamChannel(Channel parent, BsdSocket fd, boolean active)
    • AbstractKQueueStreamChannel

      AbstractKQueueStreamChannel(Channel parent, BsdSocket fd, java.net.SocketAddress remote)
    • AbstractKQueueStreamChannel

      AbstractKQueueStreamChannel(BsdSocket fd)
  • Method Details

    • newUnsafe

      Description copied from class: AbstractChannel
      Create a new AbstractChannel.AbstractUnsafe instance which will be used for the life-time of the Channel
      Specified by:
      newUnsafe in class AbstractKQueueChannel
    • metadata

      public ChannelMetadata metadata()
      Description copied from interface: Channel
      Return the ChannelMetadata of the Channel which describe the nature of the Channel.
      Specified by:
      metadata in interface Channel
      Overrides:
      metadata in class AbstractKQueueChannel
    • writeBytes

      private int writeBytes(ChannelOutboundBuffer in, ByteBuf buf) throws java.lang.Exception
      Write bytes form the given ByteBuf to the underlying Channel.
      Parameters:
      in - the collection which contains objects to write.
      buf - the ByteBuf from 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
      Throws:
      java.lang.Exception
    • adjustMaxBytesPerGatheringWrite

      private void adjustMaxBytesPerGatheringWrite(long attempted, long written, long oldMaxBytesPerGatheringWrite)
    • writeBytesMultiple

      private int writeBytesMultiple(ChannelOutboundBuffer in, IovArray array) throws java.io.IOException
      Write multiple bytes via IovArray.
      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
      Throws:
      java.io.IOException - If an I/O exception occurs during write.
    • writeBytesMultiple

      private int writeBytesMultiple(ChannelOutboundBuffer in, java.nio.ByteBuffer[] nioBuffers, int nioBufferCnt, long expectedWrittenBytes, long maxBytesPerGatheringWrite) throws java.io.IOException
      Write multiple bytes via ByteBuffer array.
      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
      Throws:
      java.io.IOException - If an I/O exception occurs during write.
    • writeDefaultFileRegion

      private int writeDefaultFileRegion(ChannelOutboundBuffer in, DefaultFileRegion region) throws java.lang.Exception
      Parameters:
      in - the collection which contains objects to write.
      region - the DefaultFileRegion from 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
      Throws:
      java.lang.Exception
    • writeFileRegion

      private int writeFileRegion(ChannelOutboundBuffer in, FileRegion region) throws java.lang.Exception
      Write a FileRegion
      Parameters:
      in - the collection which contains objects to write.
      region - the FileRegion from 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
      Throws:
      java.lang.Exception
    • doWrite

      protected void doWrite(ChannelOutboundBuffer in) throws java.lang.Exception
      Description copied from class: AbstractChannel
      Flush the content of the given buffer to the remote peer.
      Specified by:
      doWrite in class AbstractChannel
      Throws:
      java.lang.Exception
    • doWriteSingle

      protected int doWriteSingle(ChannelOutboundBuffer in) throws java.lang.Exception
      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
      Throws:
      java.lang.Exception - If an I/O error occurs.
    • doWriteMultiple

      private int doWriteMultiple(ChannelOutboundBuffer in) throws java.lang.Exception
      Attempt to write multiple ByteBuf objects.
      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
      Throws:
      java.lang.Exception - If an I/O error occurs.
    • filterOutboundMessage

      protected java.lang.Object filterOutboundMessage(java.lang.Object msg)
      Description copied from class: AbstractChannel
      Invoked when a new message is added to a ChannelOutboundBuffer of this AbstractChannel, so that the Channel implementation converts the message to another. (e.g. heap buffer -> direct buffer)
      Overrides:
      filterOutboundMessage in class AbstractChannel
    • doShutdownOutput

      @UnstableApi protected final void doShutdownOutput() throws java.lang.Exception
      Description copied from class: AbstractChannel
      Called when conditions justify shutting down the output portion of the channel. This may happen if a write operation throws an exception.
      Overrides:
      doShutdownOutput in class AbstractChannel
      Throws:
      java.lang.Exception
    • isOutputShutdown

      public boolean isOutputShutdown()
      Specified by:
      isOutputShutdown in interface DuplexChannel
      See Also:
      • Socket.isOutputShutdown()
    • isInputShutdown

      public boolean isInputShutdown()
      Description copied from interface: DuplexChannel
      Returns true if 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 of Socket.shutdownInput() and Socket.isInputShutdown().
      Specified by:
      isInputShutdown in interface DuplexChannel
    • isShutdown

      public boolean isShutdown()
      Description copied from interface: DuplexChannel
      Determine if both the input and output of this channel have been shutdown.
      Specified by:
      isShutdown in interface DuplexChannel
    • shutdownOutput

      public ChannelFuture shutdownOutput()
      Specified by:
      shutdownOutput in interface DuplexChannel
      See Also:
      • Socket.shutdownOutput()
    • shutdownOutput

      public ChannelFuture shutdownOutput(ChannelPromise promise)
      Description copied from interface: DuplexChannel
      Will shutdown the output and notify ChannelPromise.
      Specified by:
      shutdownOutput in interface DuplexChannel
      See Also:
      • Socket.shutdownOutput()
    • shutdownInput

      public ChannelFuture shutdownInput()
      Specified by:
      shutdownInput in interface DuplexChannel
      See Also:
      • Socket.shutdownInput()
    • shutdownInput

      public ChannelFuture shutdownInput(ChannelPromise promise)
      Description copied from interface: DuplexChannel
      Will shutdown the input and notify ChannelPromise.
      Specified by:
      shutdownInput in interface DuplexChannel
      See Also:
      • Socket.shutdownInput()
    • shutdownInput0

      private void shutdownInput0(ChannelPromise promise)
    • shutdown

      public ChannelFuture shutdown()
      Description copied from interface: DuplexChannel
      Will shutdown the input and output sides of this channel.
      Specified by:
      shutdown in interface DuplexChannel
      Returns:
      will be completed when both shutdown operations complete.
    • shutdown

      public ChannelFuture shutdown(ChannelPromise promise)
      Description copied from interface: DuplexChannel
      Will shutdown the input and output sides of this channel.
      Specified by:
      shutdown in interface DuplexChannel
      Parameters:
      promise - will be completed when both shutdown operations complete.
      Returns:
      will be completed when both shutdown operations complete.
    • shutdownOutputDone

      private void shutdownOutputDone(ChannelFuture shutdownOutputFuture, ChannelPromise promise)
    • shutdownDone

      private static void shutdownDone(ChannelFuture shutdownOutputFuture, ChannelFuture shutdownInputFuture, ChannelPromise promise)