io_uring_recvmsg_out(3)

πŸ“¦
version 2.15 Β· 2 versions
  • 2.15 Β· alpine 3.22, alpine 3.23, alpine 3.24, arch rolling, centos-stream 10, centos-stream 9, debian trixie, fedora 43, fedora 44, nixpkgs unstable, opensuse-leap 16.0, ubuntu noble, ubuntu questing, ubuntu resolute, ubuntu stonking (latest)
  • 2.3 Β· debian bookworm
, in alpine 3.22, alpine 3.23, alpine 3.24, arch rolling, centos-stream 10, centos-stream 9, debian trixie, fedora 43, fedora 44, nixpkgs unstable, opensuse-leap 16.0, ubuntu noble, ubuntu questing, ubuntu resolute, ubuntu stonking

πŸ’– io_uring_recvmsg_out(3) πŸ’–

okay bestie, welcome to the liburing manual ✨ this one's all about pulling your data back out of multishot recvmsg, and honestly? it's giving little-helpers-that-just-work. let's go 🫢


🌸 NAME 🌸

io_uring_recvmsg_out β€” access data from multishot recvmsg πŸ’…


✨ SYNOPSIS ✨

#include <liburing.h>

struct io_uring_recvmsg_out *io_uring_recvmsg_validate(void *buf,
                                                       int buf_len,
                                                       struct msghdr *msgh);

void *io_uring_recvmsg_name(struct io_uring_recvmsg_out *o);

struct cmsghdr *io_uring_recvmsg_cmsg_firsthdr(struct io_uring_recvmsg_out *o,
                                               struct msghdr *msgh);
struct cmsghdr *io_uring_recvmsg_cmsg_nexthdr(struct io_uring_recvmsg_out *o,
                                              struct msghdr *msgh,
                                              struct cmsghdr *cmsg);

void *io_uring_recvmsg_payload(struct io_uring_recvmsg_out *o,
                               struct msghdr *msgh);
unsigned int io_uring_recvmsg_payload_length(struct io_uring_recvmsg_out *o,
                                             int buf_len,
                                             struct msghdr *msgh);

πŸ‘‘ DESCRIPTION πŸ‘‘

so these functions? they're your little crew for getting at the data in the payload that io_uring_prep_recvmsg_multishot(3) handed you. no cap, that's the whole vibe.

msgh should point to the struct msghdr you submitted with the request. like, the same one. don't be out here pointing it at some random other msghdr, okay? 😭

io_uring_recvmsg_validate(3) will validate a buffer delivered by io_uring_prep_recvmsg_multishot(3) and extract the io_uring_recvmsg_out if it's valid, returning a pointer to it or else NULL. so like, it's either a yes or a NULL, and if it's NULL, bestie, do not dereference it πŸ’€

the structure is defined as follows:

struct io_uring_recvmsg_out {
        __u32 namelen;    /* Name byte count as would have been populated
                           * by recvmsg(2) */
        __u32 controllen; /* Control byte count */
        __u32 payloadlen; /* Payload byte count as would have been returned
                           * by recvmsg(2) */
        __u32 flags;      /* Flags result as would have been populated
                           * by recvmsg(2) */
};

and now the squad, one by one πŸŽ€


πŸ¦‹ SEE ALSO πŸ¦‹

io_uring_prep_recvmsg_multishot(3) β€” go read that one too, it's the origin story πŸ’œ


and that's the whole page, bestie!! πŸŽ€ this was liburing-2.2, dated July 26, 2022 β€” you're so welcome, now go slay those cmsgs πŸ’…βœ¨πŸ¦‹πŸŒΈπŸ«Ά

πŸ“¦ where this page comes from