Home / Function/ recvDatagram() — netty Function Reference

recvDatagram() — netty Function Reference

Architecture documentation for the recvDatagram() function in QuicheQuicChannel.java from the netty codebase.

Function java Buffer Allocators calls 1 called by 2

Entity Profile

Dependency Diagram

graph TD
  7ed04228_8203_18ea_57b2_766b3ee23bb7["recvDatagram()"]
  981bac79_4fa5_9e57_50c8_e12d0b35f6d4["QuicChannelUnsafe"]
  7ed04228_8203_18ea_57b2_766b3ee23bb7 -->|defined in| 981bac79_4fa5_9e57_50c8_e12d0b35f6d4
  4cae79d3_92ee_29bb_03d0_6a120cc97031["processReceived()"]
  4cae79d3_92ee_29bb_03d0_6a120cc97031 -->|calls| 7ed04228_8203_18ea_57b2_766b3ee23bb7
  0e1ca299_ed3d_8a6d_bf55_50ab173c29d7["recv()"]
  0e1ca299_ed3d_8a6d_bf55_50ab173c29d7 -->|calls| 7ed04228_8203_18ea_57b2_766b3ee23bb7
  3dcfc37a_37ed_432a_46ba_dfae500fd8f0["fireChannelReadCompleteIfNeeded()"]
  7ed04228_8203_18ea_57b2_766b3ee23bb7 -->|calls| 3dcfc37a_37ed_432a_46ba_dfae500fd8f0
  style 7ed04228_8203_18ea_57b2_766b3ee23bb7 fill:#6366f1,stroke:#818cf8,color:#fff

Relationship Graph

Source Code

codec-classes-quic/src/main/java/io/netty/handler/codec/quic/QuicheQuicChannel.java lines 1867–1917

        private void recvDatagram(QuicheQuicConnection conn) {
            if (!supportsDatagram) {
                return;
            }
            while (recvDatagramPending && datagramReadable && !conn.isFreed()) {
                @SuppressWarnings("deprecation")
                RecvByteBufAllocator.Handle recvHandle = recvBufAllocHandle();
                recvHandle.reset(config());

                int numMessagesRead = 0;
                do {
                    long connAddr = conn.address();
                    int len = Quiche.quiche_conn_dgram_recv_front_len(connAddr);
                    if (len == Quiche.QUICHE_ERR_DONE) {
                        datagramReadable = false;
                        return;
                    }

                    ByteBuf datagramBuffer = alloc().directBuffer(len);
                    recvHandle.attemptedBytesRead(datagramBuffer.writableBytes());
                    int writerIndex = datagramBuffer.writerIndex();
                    long memoryAddress = Quiche.writerMemoryAddress(datagramBuffer);

                    int written = Quiche.quiche_conn_dgram_recv(connAddr,
                            memoryAddress, datagramBuffer.writableBytes());
                    if (written < 0) {
                        datagramBuffer.release();
                        if (written == Quiche.QUICHE_ERR_DONE) {
                            // We did consume all datagram packets.
                            datagramReadable = false;
                            break;
                        }
                        pipeline().fireExceptionCaught(Quiche.convertToException(written));
                    }
                    recvHandle.lastBytesRead(written);
                    recvHandle.incMessagesRead(1);
                    numMessagesRead++;
                    datagramBuffer.writerIndex(writerIndex + written);
                    recvDatagramPending = false;
                    fireChannelReadCompletePending = true;

                    pipeline().fireChannelRead(datagramBuffer);
                } while (recvHandle.continueReading() && !conn.isFreed());
                recvHandle.readComplete();

                // Check if we produced any messages.
                if (numMessagesRead > 0) {
                    fireChannelReadCompleteIfNeeded();
                }
            }
        }

Domain

Subdomains

Frequently Asked Questions

What does recvDatagram() do?
recvDatagram() is a function in the netty codebase, defined in codec-classes-quic/src/main/java/io/netty/handler/codec/quic/QuicheQuicChannel.java.
Where is recvDatagram() defined?
recvDatagram() is defined in codec-classes-quic/src/main/java/io/netty/handler/codec/quic/QuicheQuicChannel.java at line 1867.
What does recvDatagram() call?
recvDatagram() calls 1 function(s): fireChannelReadCompleteIfNeeded.
What calls recvDatagram()?
recvDatagram() is called by 2 function(s): processReceived, recv.

Analyze Your Own Codebase

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

Try Supermodel Free