MCPcopy Create free account
hub / github.com/catboost/catboost / AddPacketToQueue

Method AddPacketToQueue

library/cpp/netliba/v12/udp_socket.cpp:409–447  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

407 }
408
409 void TUdpSocket::AddPacketToQueue(size_t size, const TSockAddrPair& addr, ui8 tos, size_t mtu) {
410 Y_ASSERT(LastReturnedPacketBuffer);
411 Y_ASSERT(size < LastReturnPacketBufferDataSize);
412
413 char* packet = LastReturnedPacketBuffer;
414 LastReturnedPacketBuffer = nullptr;
415
416 const size_t packetSize = size + UDP_LOW_LEVEL_HEADER_SIZE;
417 Y_ASSERT(packetSize <= UDP_MAX_PACKET_SIZE);
418
419 WritePacketHeader(packet, packetSize, addr.RemoteAddr);
420
421#ifdef SIMULATE_NETWORK_FAILURES
422 // can't simulate packet loss - we must add packet to PacketsHeaders because we already allocated space in PacketsDataBuffer.
423 if ((RandomNumber<size_t>() % 3) == 0)
424 packet[RandomNumber<size_t>() % packetSize] += RandomNumber<size_t>(); // packet broken
425#endif
426
427 // Trying to append this packet to already existing in packet queue.
428 const TIoVec iovValue = CreateIoVec(packet, packetSize);
429 if (TryToApplySmallPacketsOptimization(iovValue, addr, tos, mtu)) {
430 return;
431 }
432
433 // OK, creating new packet.
434 LastUdpPacketSize = packetSize;
435
436 TIoVec& iov = *PacketsIoVecs.PushBack(iovValue);
437
438 Y_ASSERT(!UdpPacketsAddresses.Full());
439 sockaddr_in6& name = *UdpPacketsAddresses.PushBack(addr.RemoteAddr);
440
441 char* ctrlBuffer = UdpPacketsAuxData.GetContinuousRegion(CTRL_BUFFER_SIZE);
442
443 UdpPacketsHeaders.resize(UdpPacketsHeaders.size() + 1);
444 TMsgHdr& hdr = UdpPacketsHeaders.back().msg_hdr;
445
446 hdr = CreateNl12SendMsgHdr(name, addr.MyAddr, iov, tos, ctrlBuffer, CTRL_BUFFER_SIZE);
447 }
448
449 void TUdpSocket::ForgetHeadUdpPackets(const size_t numPackets) {
450 // necessary for TCircularPodBuffer::EraseBefore

Callers 2

AddAcksToPacketQueueFunction · 0.80
AddDataToPacketQueueFunction · 0.80

Calls 9

WritePacketHeaderFunction · 0.85
CreateIoVecFunction · 0.85
CreateNl12SendMsgHdrFunction · 0.85
FullMethod · 0.80
GetContinuousRegionMethod · 0.80
PushBackMethod · 0.45
resizeMethod · 0.45
sizeMethod · 0.45
backMethod · 0.45

Tested by

no test coverage detected