diff --git a/man/io_uring_prep_recvmsg.3 b/man/io_uring_prep_recvmsg.3
index 24c68ce..8c49411 100644
--- a/man/io_uring_prep_recvmsg.3
+++ b/man/io_uring_prep_recvmsg.3
@@ -15,11 +15,6 @@ io_uring_prep_recvmsg \- prepare a recvmsg request
 .BI "                           int " fd ","
 .BI "                           struct msghdr *" msg ","
 .BI "                           unsigned " flags ");"
-.PP
-.BI "void io_uring_prep_recvmsg_multishot(struct io_uring_sqe *" sqe ","
-.BI "                                     int " fd ","
-.BI "                                     struct msghdr *" msg ","
-.BI "                                     unsigned " flags ");"
 .fi
 .SH DESCRIPTION
 .PP
@@ -42,21 +37,6 @@ This function prepares an async
 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 length to be 0
-, the
-.B IOSQE_BUFFER_SELECT
-flag to be set and no
-.B MSG_WAITALL
-flag 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 it's result.
-If a posted CQE does not have the
-.B IORING_CQE_F_MORE
-flag set then the multishot receive will be done and the application should issue a
-new request.
-Multishot variants are available since kernel 5.20.
-
 After calling this function, additional io_uring internal modifier flags
 may be set in the SQE
 .I off
diff --git a/man/io_uring_prep_recvmsg_multishot.3 b/man/io_uring_prep_recvmsg_multishot.3
deleted file mode 120000
index cd9566f..0000000
--- a/man/io_uring_prep_recvmsg_multishot.3
+++ /dev/null
@@ -1 +0,0 @@
-io_uring_prep_recvmsg.3
\ No newline at end of file
diff --git a/src/include/liburing.h b/src/include/liburing.h
index 4df3139..d35bfa9 100644
--- a/src/include/liburing.h
+++ b/src/include/liburing.h
@@ -419,14 +419,6 @@ static inline void io_uring_prep_recvmsg(struct io_uring_sqe *sqe, int fd,
 	sqe->msg_flags = flags;
 }
 
-static inline void io_uring_prep_recvmsg_multishot(struct io_uring_sqe *sqe,
-						   int fd, struct msghdr *msg,
-						   unsigned flags)
-{
-	io_uring_prep_recvmsg(sqe, fd, msg, flags);
-	sqe->ioprio |= IORING_RECV_MULTISHOT;
-}
-
 static inline void io_uring_prep_sendmsg(struct io_uring_sqe *sqe, int fd,
 					 const struct msghdr *msg,
 					 unsigned flags)
diff --git a/test/recv-multishot.c b/test/recv-multishot.c
index f6d41c8..9df8184 100644
--- a/test/recv-multishot.c
+++ b/test/recv-multishot.c
@@ -25,7 +25,6 @@ enum early_error_t {
 };
 
 struct args {
-	bool recvmsg;
 	bool stream;
 	bool wait_each;
 	enum early_error_t early_error;
@@ -48,7 +47,6 @@ static int test(struct args *args)
 	int recv_cqes = 0;
 	bool early_error = false;
 	bool early_error_started = false;
-	struct msghdr msg = { };
 	struct __kernel_timespec timeout = {
 		.tv_sec = 1,
 	};
@@ -101,13 +99,7 @@ static int test(struct args *args)
 	}
 
 	sqe = io_uring_get_sqe(&ring);
-	if (args->recvmsg) {
-		memset(&msg, 0, sizeof(msg));
-		msg.msg_namelen = sizeof(struct sockaddr_in);
-		io_uring_prep_recvmsg_multishot(sqe, fds[0], &msg, 0);
-	} else {
-		io_uring_prep_recv_multishot(sqe, fds[0], NULL, 0, 0);
-	}
+	io_uring_prep_recv_multishot(sqe, fds[0], NULL, 0, 0);
 	sqe->flags |= IOSQE_BUFFER_SELECT;
 	sqe->buf_group = 7;
 	io_uring_sqe_set_data64(sqe, 1234);
@@ -328,19 +320,18 @@ int main(int argc, char *argv[])
 	if (argc > 1)
 		return T_EXIT_SKIP;
 
-	for (loop = 0; loop < 7; loop++) {
+	for (loop = 0; loop < 4; loop++) {
 		struct args a = {
 			.stream = loop & 0x01,
-			.recvmsg = loop & 0x02,
-			.wait_each = loop & 0x4,
+			.wait_each = loop & 0x2,
 		};
 		for (early_error = 0; early_error < ERROR_EARLY_LAST; early_error++) {
 			a.early_error = (enum early_error_t)early_error;
 			ret = test(&a);
 			if (ret) {
 				fprintf(stderr,
-					"test stream=%d recvmsg=%d wait_each=%d early_error=%d failed\n",
-					a.stream, a.recvmsg, a.wait_each, a.early_error);
+					"test stream=%d wait_each=%d early_error=%d failed\n",
+					a.stream, a.wait_each, a.early_error);
 				return T_EXIT_FAIL;
 			}
 			if (no_recv_mshot)
