Home / Function/ doWriteMessage() — netty Function Reference

doWriteMessage() — netty Function Reference

Architecture documentation for the doWriteMessage() function in KQueueDatagramChannel.java from the netty codebase.

Entity Profile

Dependency Diagram

graph TD
  0bcc10e9_2b7e_9247_29c7_51b95390a7b3["doWriteMessage()"]
  d655085f_28d0_2ab1_6880_68b2da4e27e4["KQueueDatagramChannel"]
  0bcc10e9_2b7e_9247_29c7_51b95390a7b3 -->|defined in| d655085f_28d0_2ab1_6880_68b2da4e27e4
  style 0bcc10e9_2b7e_9247_29c7_51b95390a7b3 fill:#6366f1,stroke:#818cf8,color:#fff

Relationship Graph

Source Code

transport-classes-kqueue/src/main/java/io/netty/channel/kqueue/KQueueDatagramChannel.java lines 255–311

    @Override
    protected boolean doWriteMessage(Object msg) throws Exception {
        final ByteBuf data;
        InetSocketAddress remoteAddress;
        if (msg instanceof AddressedEnvelope) {
            @SuppressWarnings("unchecked")
            AddressedEnvelope<ByteBuf, InetSocketAddress> envelope =
                    (AddressedEnvelope<ByteBuf, InetSocketAddress>) msg;
            data = envelope.content();
            remoteAddress = envelope.recipient();
        } else {
            data = (ByteBuf) msg;
            remoteAddress = null;
        }

        final int dataLen = data.readableBytes();
        if (dataLen == 0) {
            return true;
        }

        final long writtenBytes;
        if (data.hasMemoryAddress()) {
            long memoryAddress = data.memoryAddress();
            if (remoteAddress == null) {
                try {
                    writtenBytes = socket.writeAddress(memoryAddress, data.readerIndex(), data.writerIndex());
                } catch (Errors.NativeIoException e) {
                    throw translateForConnected(e);
                }
            } else {
                writtenBytes = socket.sendToAddress(memoryAddress, data.readerIndex(), data.writerIndex(),
                        remoteAddress.getAddress(), remoteAddress.getPort());
            }
        } else if (data.nioBufferCount() > 1) {
            IovArray array = ((NativeArrays) registration().attachment()).cleanIovArray();
            array.add(data, data.readerIndex(), data.readableBytes());
            int cnt = array.count();
            assert cnt != 0;

            if (remoteAddress == null) {
                writtenBytes = socket.writevAddresses(array.memoryAddress(0), cnt);
            } else {
                writtenBytes = socket.sendToAddresses(array.memoryAddress(0), cnt,
                        remoteAddress.getAddress(), remoteAddress.getPort());
            }
        } else {
            ByteBuffer nioData = data.internalNioBuffer(data.readerIndex(), data.readableBytes());
            if (remoteAddress == null) {
                writtenBytes = socket.write(nioData, nioData.position(), nioData.limit());
            } else {
                writtenBytes = socket.sendTo(nioData, nioData.position(), nioData.limit(),
                        remoteAddress.getAddress(), remoteAddress.getPort());
            }
        }

        return writtenBytes > 0;
    }

Domain

Subdomains

Frequently Asked Questions

What does doWriteMessage() do?
doWriteMessage() is a function in the netty codebase, defined in transport-classes-kqueue/src/main/java/io/netty/channel/kqueue/KQueueDatagramChannel.java.
Where is doWriteMessage() defined?
doWriteMessage() is defined in transport-classes-kqueue/src/main/java/io/netty/channel/kqueue/KQueueDatagramChannel.java at line 255.

Analyze Your Own Codebase

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

Try Supermodel Free