On Fri, Jul 15, 2022 at 1:03 PM Alexander Babayants <babayants.alexander@xxxxxxxxx> wrote: > The behaviour of recvmmsg() with MSG_PEEK flag confuses me. I'd expect > it to peek multiple messages at once, but it seems to peek only the > first one, filling each of the provided struct msghdr with a copy of > the first message. I do not see if it is documented anywhere, is it a > bug or intended design? > > What I want to achieve is to first peek into the socket, get the size > of each message, then allocate appropriate buffers and read the > messages with the second recvmmsg() call. This seems to be a > relatively common pattern for reading single messages via recvmsg(), > and I naively expected it to work with recvmmsg() too. You might want to look at SO_PEEK_OFF in the socket.7 manpage. (Or even better, as suggested before in the thread, rework your code to not peek at all.)