NAME |SYNOPSIS |DESCRIPTION |RETURN VALUE |ERRORS |NOTES |SEE ALSO |COLOPHON | |
io_uring_prep_recvmsg(3) liburing Manualio_uring_prep_recvmsg(3)io_uring_prep_recvmsg - prepare a recvmsg request
#include <sys/types.h>#include <sys/socket.h>#include <liburing.h>void io_uring_prep_recvmsg(struct io_uring_sqe *sqe,intfd,struct msghdr *msg,unsignedflags);void io_uring_prep_recvmsg_multishot(struct io_uring_sqe *sqe,intfd,struct msghdr *msg,unsignedflags);
Theio_uring_prep_recvmsg(3) function prepares a recvmsg request. The submission queue entrysqe is setup to use the file descriptorfd to start receiving the data indicated bymsg with therecvmsg(2) defined flags in theflags argument. This function prepares an asyncrecvmsg(2) request. See that man page for details on the arguments specified to this prep helper. The multishot version allows the application to issue a single receive request, which repeatedly posts a CQE when data is available. It requires theIOSQE_BUFFER_SELECTflag to be set and noMSG_WAITALLflag to be set. Therefore each CQE will take a buffer out of a provided buffer pool for receiving. The application should check the flags of each CQE, regardless of its result. If a posted CQE does not have theIORING_CQE_F_MOREflag set, then the multishot receive is done and the application must issue a new request if it still wishes to receive data from the socket. Unlikerecvmsg(2), multishot recvmsg will prepend astructio_uring_recvmsg_out which describes the layout of the rest of the buffer in combination with the initialstruct msghdr submitted with the request. Seeio_uring_recvmsg_out(3) for more information on accessing the data. Multishot variants are available since kernel 6.0. After calling this function, additional io_uring internal modifier flags may be set in the SQEioprio field. The following flags are supported:IORING_RECVSEND_POLL_FIRST If set, io_uring will assume the socket is currently empty and attempting to receive data will be unsuccessful. For this case, io_uring will arm internal poll and trigger a receive of the data when the socket has data to be read. This initial receive attempt can be wasteful for the case where the socket is expected to be empty, setting this flag will bypass the initial receive attempt and go straight to arming poll. If poll does indicate that data is ready to be received, the operation will proceed. Can be used with the CQEIORING_CQE_F_SOCK_NONEMPTYflag, which io_uring will set on CQEs after arecv(2) orrecvmsg(2) operation. If set, the socket still had data to be read after the operation completed. Both these flags are available since 5.19.
None
The CQEres field will contain the result of the operation. See the related man page for details on possible values. Note that where synchronous system calls will return-1on failure and seterrno to the actual error value, io_uring never useserrno. Instead it returns the negatederrno directly in the CQEres field.
As with any request that passes in data in a struct, that data must remain valid until the request has been successfully submitted. It need not remain valid until completion. Once a request has been submitted, the in-kernel state is stable. Very early kernels (5.4 and earlier) required state to be stable until the completion occurred. Applications can test for this behavior by inspecting theIORING_FEAT_SUBMIT_STABLEflag passed back fromio_uring_queue_init_params(3).
io_uring_get_sqe(3),io_uring_submit(3),io_uring_buf_ring_init(3),io_uring_buf_ring_add(3),recvmsg(2)
This page is part of theliburing (A library for io_uring) project. Information about the project can be found at ⟨https://github.com/axboe/liburing⟩. If you have a bug report for this manual page, send it to io-uring@vger.kernel.org. This page was obtained from the project's upstream Git repository ⟨https://github.com/axboe/liburing⟩ on 2025-08-11. (At that time, the date of the most recent commit that was found in the repository was 2025-08-02.) If you discover any rendering problems in this HTML version of the page, or you believe there is a better or more up-to-date source for the page, or you have corrections or improvements to the information in this COLOPHON (which isnot part of the original manual page), send a mail to man-pages@man7.orgliburing-2.2 March 12, 2022io_uring_prep_recvmsg(3)Pages that refer to this page:io_uring_recvmsg_cmsg_firsthdr(3), io_uring_recvmsg_cmsg_nexthdr(3), io_uring_recvmsg_name(3), io_uring_recvmsg_out(3), io_uring_recvmsg_payload(3), io_uring_recvmsg_payload_length(3), io_uring_recvmsg_validate(3)
HTML rendering created 2025-09-06 byMichael Kerrisk, author ofThe Linux Programming Interface. For details of in-depthLinux/UNIX system programming training courses that I teach, lookhere. Hosting byjambit GmbH. | ![]() |