Tries to get packet buffer in non-blocking way for given transfer returns std::pair if _current_ transfer was removed during FlushPackets() or buffer ovrflow for _any_ transfers
| 849 | // Tries to get packet buffer in non-blocking way for given transfer |
| 850 | // returns std::pair<nullptr, err> if _current_ transfer was removed during FlushPackets() or buffer ovrflow for _any_ transfers |
| 851 | std::pair<char*, ui8> TUdpHost::GetPacketBuffer(const size_t bufSize, const TConnection* connection, const ui64 id) { |
| 852 | Y_ASSERT(connection); |
| 853 | ui8 err = TUdpHost::EFlashPacketResult::FPR_OK; |
| 854 | // if small packet optimization is enabled then there could be thousands of packets added before we reach max udp packets in queue |
| 855 | if (++NewPacketsAfterLastFlush > UDP_MAX_NEW_PACKETS_BEFORE_FORCED_FLUSH) { |
| 856 | //printf("TUdpHost::GetPacketBuffer: too many small packets added, flushing\n"); |
| 857 | err = FlushPacketsAndCheck(connection, id); |
| 858 | if (err) |
| 859 | return std::make_pair(nullptr, err); |
| 860 | } |
| 861 | |
| 862 | char* msgBuf = S.NewPacketBuffer(bufSize); |
| 863 | if (!msgBuf) { |
| 864 | err = FlushPacketsAndCheck(connection, id); |
| 865 | if (err) |
| 866 | return std::make_pair(nullptr, err); |
| 867 | |
| 868 | msgBuf = S.NewPacketBuffer(bufSize); |
| 869 | } |
| 870 | return std::make_pair(msgBuf, err); |
| 871 | } |
| 872 | |
| 873 | // ui8 - error bitmap |
| 874 | // FPR_OVERFLOW - there were non-sent packets because of udp/kernel buffer overflow. |
nothing calls this directly
no test coverage detected