Re: IOSQE_IO_LINK vs. short send of SOCK_STREAM

Stefan Metzmacher
2023-01-11T16:33:10Z

Hi Ming,

> Per my understanding, a short send on SOCK_STREAM should terminate the
> remainder of the SQE chain built by IOSQE_IO_LINK.
>
> But from my observation, this point isn't true when using io_sendmsg or
> io_sendmsg_zc on TCP socket, and the other remainder of the chain still
> can be completed after one short send is found. MSG_WAITALL is off.

This is due to legacy reasons, you need pass MSG_WAITALL explicitly
in order to a retry or an error on a short write...
It should work for send, sendmsg, sendmsg_zc, recv and recvmsg.

For recv and recvmsg MSG_WAITALL also fails the link for MSG_TRUNC and MSG_CTRUNC.

metze