io_uring_prep_send_bundle(3) — Linux manual page
io_uring_prep_send(3) liburing Manual io_uring_prep_send(3)
NAME
io_uring_prep_send - prepare a send request
SYNOPSIS
#include <liburing.h>
void io_uring_prep_send(struct io_uring_sqe *sqe,
int sockfd,
const void *buf,
size_t len,
int flags);
void io_uring_prep_sendto(struct io_uring_sqe *sqe,
int sockfd,
const void *buf,
size_t len,
int flags,
const struct sockaddr *addr,
socklen_t addrlen);
void io_uring_prep_send_bundle(struct io_uring_sqe *sqe,
int sockfd,
size_t len,
int flags);
DESCRIPTION
The io_uring_prep_send(3) function prepares a send request. The
submission queue entry sqe is setup to use the file descriptor
sockfd to start sending the data from buf of size len bytes and
with modifier flags flags.
Note that using IOSQE_IO_LINK with this request type requires the
setting of MSG_WAITALL in the flags argument, as a short send
isn't a considered an error condition without that being set.
This function prepares an async send(2) request. See that man
page for details.
The io_uring_prep_sendto(3) function prepares a sendto request.
The submission queue entry sqe is setup to use the file
descriptor sockfd to start sending the data from buf of size len
bytes and with modifier flags flags. The destination address is
specified by addr and addrlen and must be a valid address for the
socket type.
This function prepares an async sendto(2) request. See that man
page for details.
Both of the above send variants may be used with provided
buffers, where rather than pass a buffer in directly with the
request, IOSQE_BUFFER_SELECT is set in the SQE flags field, and
additionally a buffer group ID is set in the SQE buf_group field.
By using provided buffers with send requests, the application can
prevent any kind of reordering of the outgoing data which can
otherwise occur if the application has more than one send request
inflight for a single socket. This provides better pipelining of
data, where previously the app needed to manually serialize
sends.
The bundle version allows the application to issue a single send
request, with a buffer group ID given in the SQE buf_group field,
which keeps sending from that buffer group until it runs out of
buffers. As with any other request using provided buffers,
IOSQE_BUFFER_SELECT must also be set in the SQE flags before
submission. A single CQE is posted for the send, with the result
being how many bytes were sent, on success. When used with
provided buffers, send or send bundle will contain the starting
buffer group ID in the CQE flags field. The number of bytes sent
starts from there, and will be in contigious buffer IDs after
that. Send bundle, and send with provided buffers in general, are
available since kernel 6.10, and can be further identified by
checking for the IORING_FEAT_SEND_BUF_SELECT flag returned in
when using io_uring_init_queue_params(3) to setup the ring.
RETURN VALUE
None
ERRORS
The CQE res 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 -1 on failure and set
errno to the actual error value, io_uring never uses errno.
Instead it returns the negated errno directly in the CQE res
field.
SEE ALSO
io_uring_get_sqe(3), io_uring_submit(3),
io_uring_buf_ring_init(3), io_uring_buf_ring_add(3), send(2)
sendto(2)
COLOPHON
This page is part of the liburing (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 2024-06-14. (At that
time, the date of the most recent commit that was found in the
repository was 2024-06-03.) 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 is not part of the original manual page), send a mail to
man-pages@man7.org