On 3/23/22 2:52 PM, Pavel Begunkov wrote:
On 3/23/22 20:45, Constantine Gavrilov wrote:
On Wed, Mar 23, 2022 at 10:14 PM Pavel Begunkov asml.silence@gmail.com wrote:
On 3/23/22 15:39, Jens Axboe wrote:
We currently don't attempt to get the full asked for length even if MSG_WAITALL is set, if we get a partial receive. If we do see a partial receive, then just note how many bytes we did and return -EAGAIN to get it retried.
The iov is advanced appropriately for the vector based case, and we manually bump the buffer and remainder for the non-vector case.
How datagrams work with MSG_WAITALL? I highly doubt it coalesces 2+ packets to satisfy the length requirement (e.g. because it may move the address back into the userspace). I'm mainly afraid about breaking io_uring users who are using the flag just to fail links when there is not enough data in a packet.
-- Pavel Begunkov
Pavel:
Datagrams have message boundaries and the MSG_WAITALL flag does not make sense there. I believe it is ignored by receive code on daragram sockets. MSG_WAITALL makes sends only on stream sockets, like TCP. The manual page says "This flag has no effect for datagram sockets.".
Missed the line this in mans, thanks, and it's exactly as expected. The problem is on the io_uring side where with the patch it might blindly do a second call into the network stack consuming 2+ packets.
Right, it should not be applied for datagrams.