| 716 | } |
| 717 | |
| 718 | int TTryToRecvMMsgSocket::FillRecvBuffers() { |
| 719 | Y_ASSERT(IsRecvMMsgSupported()); |
| 720 | Y_ASSERT(RecvPacketsBegin <= RecvPacketsHeadersEnd); |
| 721 | if (RecvPacketsBegin < RecvPacketsHeadersEnd) { |
| 722 | return RecvPacketsHeadersEnd - RecvPacketsBegin; |
| 723 | } |
| 724 | |
| 725 | // no packets left from last recvmmsg call |
| 726 | for (size_t i = 0; i != RecvPacketsHeadersEnd; ++i) { // reinit only used by last recvmmsg call headers |
| 727 | RecvPacketsIoVecs[i] = CreateIoVec(RecvPackets[i]->GetDataPtr(), RecvPackets[i]->GetBufSize()); |
| 728 | } |
| 729 | RecvPacketsBegin = RecvPacketsHeadersEnd = 0; |
| 730 | |
| 731 | const int r = RecvMMsgImpl(&RecvPacketsHeaders[0], (unsigned int)RecvPacketsHeaders.size(), 0, nullptr); |
| 732 | if (r >= 0) { |
| 733 | RecvPacketsHeadersEnd = r; |
| 734 | } else { |
| 735 | Y_ASSERT(LastSystemError() == EAGAIN || LastSystemError() == EWOULDBLOCK); |
| 736 | } |
| 737 | return r; |
| 738 | } |
| 739 | |
| 740 | // not thread-safe |
| 741 | TUdpRecvPacket* TTryToRecvMMsgSocket::Recv(sockaddr_in6* fromAddress, sockaddr_in6* dstAddr, int) { |
nothing calls this directly
no test coverage detected