This implements the functionality of getsockname(2) and getpeername(2) under a single operation. Signed-off-by: Gabriel Krisman Bertazi --- src/include/liburing.h | 12 ++++++++++++ src/include/liburing/io_uring.h | 1 + 2 files changed, 13 insertions(+) diff --git a/src/include/liburing.h b/src/include/liburing.h index 83819eb7..77b0a135 100644 --- a/src/include/liburing.h +++ b/src/include/liburing.h @@ -1572,6 +1572,18 @@ IOURINGINLINE void io_uring_prep_cmd_sock(struct io_uring_sqe *sqe, sqe->level = level; } +IOURINGINLINE void io_uring_prep_cmd_getsockname(struct io_uring_sqe *sqe, + int fd, struct sockaddr *sockaddr, + socklen_t *sockaddr_len, + int peer) + LIBURING_NOEXCEPT +{ + io_uring_prep_rw(IORING_OP_URING_CMD, sqe, fd, sockaddr, 0, 0); + sqe->cmd_op = SOCKET_URING_OP_GETSOCKNAME; + sqe->addr3 = (unsigned long) (uintptr_t) sockaddr_len; + sqe->optlen = peer; +} + IOURINGINLINE void io_uring_prep_waitid(struct io_uring_sqe *sqe, idtype_t idtype, id_t id, diff --git a/src/include/liburing/io_uring.h b/src/include/liburing/io_uring.h index 44ce8229..365f0584 100644 --- a/src/include/liburing/io_uring.h +++ b/src/include/liburing/io_uring.h @@ -950,6 +950,7 @@ enum io_uring_socket_op { SOCKET_URING_OP_GETSOCKOPT, SOCKET_URING_OP_SETSOCKOPT, SOCKET_URING_OP_TX_TIMESTAMP, + SOCKET_URING_OP_GETSOCKNAME, }; /* -- 2.51.0