scatteringRead() — netty Function Reference
Architecture documentation for the scatteringRead() function in EpollDatagramChannel.java from the netty codebase.
Entity Profile
Dependency Diagram
graph TD 7cf07df9_4be2_ed29_9353_cac4c09b8739["scatteringRead()"] dab3c3bb_b3e2_f3b8_e8e0_37c99496afe9["EpollDatagramChannel"] 7cf07df9_4be2_ed29_9353_cac4c09b8739 -->|defined in| dab3c3bb_b3e2_f3b8_e8e0_37c99496afe9 0ad4ff23_5654_f57a_1eda_1a36ffc34db3["epollInReady()"] 0ad4ff23_5654_f57a_1eda_1a36ffc34db3 -->|calls| 7cf07df9_4be2_ed29_9353_cac4c09b8739 0a5c9ebd_9542_c721_3007_ef54d1145fdc["processPacket()"] 7cf07df9_4be2_ed29_9353_cac4c09b8739 -->|calls| 0a5c9ebd_9542_c721_3007_ef54d1145fdc da43f51f_6e9f_7e6c_396a_89c96150f970["addDatagramPacketToOut()"] 7cf07df9_4be2_ed29_9353_cac4c09b8739 -->|calls| da43f51f_6e9f_7e6c_396a_89c96150f970 f06c6fde_39f9_620f_9dae_c0903795968e["processPacketList()"] 7cf07df9_4be2_ed29_9353_cac4c09b8739 -->|calls| f06c6fde_39f9_620f_9dae_c0903795968e 0d502a62_d670_7011_9c8e_157dd8f2fb61["releaseAndRecycle()"] 7cf07df9_4be2_ed29_9353_cac4c09b8739 -->|calls| 0d502a62_d670_7011_9c8e_157dd8f2fb61 style 7cf07df9_4be2_ed29_9353_cac4c09b8739 fill:#6366f1,stroke:#818cf8,color:#fff
Relationship Graph
Source Code
transport-classes-epoll/src/main/java/io/netty/channel/epoll/EpollDatagramChannel.java lines 755–813
private boolean scatteringRead(EpollRecvByteAllocatorHandle allocHandle, NativeDatagramPacketArray array,
ByteBuf byteBuf, int datagramSize, int numDatagram) throws IOException {
RecyclableArrayList datagramPackets = null;
try {
int offset = byteBuf.writerIndex();
for (int i = 0; i < numDatagram; i++, offset += datagramSize) {
if (!array.addWritable(byteBuf, offset, datagramSize)) {
break;
}
}
allocHandle.attemptedBytesRead(offset - byteBuf.writerIndex());
NativeDatagramPacketArray.NativeDatagramPacket[] packets = array.packets();
int received = socket.recvmmsg(packets, 0, array.count());
if (received == 0) {
allocHandle.lastBytesRead(-1);
return false;
}
InetSocketAddress local = localAddress();
// Set the writerIndex too the maximum number of bytes we might have read.
int bytesReceived = received * datagramSize;
byteBuf.writerIndex(byteBuf.writerIndex() + bytesReceived);
if (received == 1) {
// Single packet fast-path
DatagramPacket packet = packets[0].newDatagramPacket(byteBuf, local);
if (!(packet instanceof io.netty.channel.unix.SegmentedDatagramPacket)) {
processPacket(pipeline(), allocHandle, datagramSize, packet);
return true;
}
}
// Its important that we process all received data out of the NativeDatagramPacketArray
// before we call fireChannelRead(...). This is because the user may call flush()
// in a channelRead(...) method and so may re-use the NativeDatagramPacketArray again.
datagramPackets = RecyclableArrayList.newInstance();
for (int i = 0; i < received; i++) {
DatagramPacket packet = packets[i].newDatagramPacket(byteBuf, local);
// We need to skip the maximum datagram size to ensure we have the readerIndex in the right position
// for the next one.
byteBuf.skipBytes(datagramSize);
addDatagramPacketToOut(packet, datagramPackets);
}
// Ass we did use readRetainedSlice(...) before we should now release the byteBuf and null it out.
byteBuf.release();
byteBuf = null;
processPacketList(pipeline(), allocHandle, bytesReceived, datagramPackets);
datagramPackets.recycle();
datagramPackets = null;
return true;
} finally {
releaseAndRecycle(byteBuf, datagramPackets);
}
}
Domain
Subdomains
Called By
Source
Frequently Asked Questions
What does scatteringRead() do?
scatteringRead() is a function in the netty codebase, defined in transport-classes-epoll/src/main/java/io/netty/channel/epoll/EpollDatagramChannel.java.
Where is scatteringRead() defined?
scatteringRead() is defined in transport-classes-epoll/src/main/java/io/netty/channel/epoll/EpollDatagramChannel.java at line 755.
What does scatteringRead() call?
scatteringRead() calls 4 function(s): addDatagramPacketToOut, processPacket, processPacketList, releaseAndRecycle.
What calls scatteringRead()?
scatteringRead() is called by 1 function(s): epollInReady.
Analyze Your Own Codebase
Get architecture documentation, dependency graphs, and domain analysis for your codebase in minutes.
Try Supermodel Free