Home / Class/ AbstractKQueueDatagramChannel Class — netty Architecture

AbstractKQueueDatagramChannel Class — netty Architecture

Architecture documentation for the AbstractKQueueDatagramChannel class in AbstractKQueueDatagramChannel.java from the netty codebase.

Entity Profile

Dependency Diagram

graph TD
  38b6ae38_f4e2_8750_9e5c_70acc2edbcc4["AbstractKQueueDatagramChannel"]
  c088ad10_047d_fafa_9e03_6ea9052ddbf9["AbstractKQueueDatagramChannel.java"]
  38b6ae38_f4e2_8750_9e5c_70acc2edbcc4 -->|defined in| c088ad10_047d_fafa_9e03_6ea9052ddbf9
  3967e726_cfac_fc8e_d75f_32764eb5aadb["AbstractKQueueDatagramChannel()"]
  38b6ae38_f4e2_8750_9e5c_70acc2edbcc4 -->|method| 3967e726_cfac_fc8e_d75f_32764eb5aadb
  ef853bf6_1828_c075_614d_9de488834374["ChannelMetadata()"]
  38b6ae38_f4e2_8750_9e5c_70acc2edbcc4 -->|method| ef853bf6_1828_c075_614d_9de488834374
  7cbafd71_0401_6af2_a303_55c1e34e6c03["doWriteMessage()"]
  38b6ae38_f4e2_8750_9e5c_70acc2edbcc4 -->|method| 7cbafd71_0401_6af2_a303_55c1e34e6c03
  47400952_c561_3b43_4d14_a21536400da2["doWrite()"]
  38b6ae38_f4e2_8750_9e5c_70acc2edbcc4 -->|method| 47400952_c561_3b43_4d14_a21536400da2

Relationship Graph

Source Code

transport-classes-kqueue/src/main/java/io/netty/channel/kqueue/AbstractKQueueDatagramChannel.java lines 24–76

abstract class AbstractKQueueDatagramChannel extends AbstractKQueueChannel {

    private static final ChannelMetadata METADATA = new ChannelMetadata(true, 16);

    AbstractKQueueDatagramChannel(Channel parent, BsdSocket fd, boolean active) {
        super(parent, fd, active);
    }

    @Override
    public ChannelMetadata metadata() {
        return METADATA;
    }

    protected abstract boolean doWriteMessage(Object msg) throws Exception;

    @Override
    protected void doWrite(ChannelOutboundBuffer in) throws Exception {
        int maxMessagesPerWrite = maxMessagesPerWrite();
        while (maxMessagesPerWrite > 0) {
            Object msg = in.current();
            if (msg == null) {
                break;
            }

            try {
                boolean done = false;
                for (int i = config().getWriteSpinCount(); i > 0; --i) {
                    if (doWriteMessage(msg)) {
                        done = true;
                        break;
                    }
                }

                if (done) {
                    in.remove();
                    maxMessagesPerWrite--;
                } else {
                    break;
                }
            } catch (IOException e) {
                maxMessagesPerWrite--;

                // Continue on write error as a DatagramChannel can write to multiple remote peers
                //
                // See https://github.com/netty/netty/issues/2665
                in.remove(e);
            }
        }

        // Whether all messages were written or not.
        writeFilter(!in.isEmpty());
    }
}

Frequently Asked Questions

What is the AbstractKQueueDatagramChannel class?
AbstractKQueueDatagramChannel is a class in the netty codebase, defined in transport-classes-kqueue/src/main/java/io/netty/channel/kqueue/AbstractKQueueDatagramChannel.java.
Where is AbstractKQueueDatagramChannel defined?
AbstractKQueueDatagramChannel is defined in transport-classes-kqueue/src/main/java/io/netty/channel/kqueue/AbstractKQueueDatagramChannel.java at line 24.

Analyze Your Own Codebase

Get architecture documentation, dependency graphs, and domain analysis for your codebase in minutes.

Try Supermodel Free