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