Re: io_uring_enter() with opcode IORING_OP_RECV ignores MSG_WAITALL in msg_flags

From: Pavel Begunkov
Date: Wed Mar 23 2022 - 15:41:35 EST


On 3/23/22 12:19, Jens Axboe wrote:
On 3/23/22 4:31 AM, Constantine Gavrilov wrote:
I get partial receives on TCP socket, even though I specify
MSG_WAITALL with IORING_OP_RECV opcode. Looking at tcpdump in
wireshark, I see entire reassambled packet (+4k), so it is not a
disconnect. The MTU is smaller than 4k.

From the mailing list history, looks like this was discussed before
and it seems the fix was supposed to be in. Can someone clarify the
expected behavior?

I do not think rsvmsg() has this issue.

Do you have a test case? I added the io-uring list, that's the
appropriate forum for this kind of discussion.

MSG_WAITALL (since Linux 2.2)
This flag requests that the operation block until the full
request is satisfied. However, the call may still return
less data than requested if a signal is caught

My guess would be that it's either due to signals (including
task_works actively used by io_uring) or because of some
interoperability problem with NOWAIT.

--
Pavel Begunkov