diff --git a/man/io_uring_prep_recv.3 b/man/io_uring_prep_recv.3 index 509b35523..c718ae425 100644 --- a/man/io_uring_prep_recv.3 +++ b/man/io_uring_prep_recv.3 @@ -135,7 +135,22 @@ Instead it returns the negated .I errno directly in the CQE .I res -field. +field. Some common error cases are: +.TP +.B -EAGAIN +The operation would have blocked. io_uring normally arms internal poll and +retries the request once the socket is ready, so this result is the expected +outcome when +.B MSG_DONTWAIT +was set in the +.I flags +argument. It can also occur without +.B MSG_DONTWAIT +when the request cannot make progress and io_uring stops retrying rather than +waiting indefinitely. Handle +.B -EAGAIN +as a transient condition and reissue the request. +.P .SH NOTES Despite accepting a size_t number of bytes, these functions can transfer at most INT_MAX bytes per call (the maximum for the underlying syscall interface). diff --git a/man/io_uring_prep_recvmsg.3 b/man/io_uring_prep_recvmsg.3 index 74a0c9ef3..9f048beb8 100644 --- a/man/io_uring_prep_recvmsg.3 +++ b/man/io_uring_prep_recvmsg.3 @@ -107,7 +107,24 @@ Instead it returns the negated .I errno directly in the CQE .I res -field. +field. Some common error cases are: +.TP +.B -EAGAIN +The operation would have blocked. io_uring normally arms internal poll and +retries the request once the socket is ready, so this result is the expected +outcome when +.B MSG_DONTWAIT +was set in the +.I msg_flags +of the +.I msghdr +argument. It can also occur without +.B MSG_DONTWAIT +when the request cannot make progress and io_uring stops retrying rather than +waiting indefinitely. Handle +.B -EAGAIN +as a transient condition and reissue the request. +.P .SH NOTES 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 diff --git a/man/io_uring_prep_send.3 b/man/io_uring_prep_send.3 index f4470528e..794671258 100644 --- a/man/io_uring_prep_send.3 +++ b/man/io_uring_prep_send.3 @@ -184,7 +184,22 @@ Instead it returns the negated .I errno directly in the CQE .I res -field. +field. Some common error cases are: +.TP +.B -EAGAIN +The operation would have blocked. io_uring normally arms internal poll and +retries the request once the socket is ready, so this result is the expected +outcome when +.B MSG_DONTWAIT +was set in the +.I flags +argument. It can also occur without +.B MSG_DONTWAIT +when the request cannot make progress and io_uring stops retrying rather than +waiting indefinitely. Handle +.B -EAGAIN +as a transient condition and reissue the request. +.P .SH NOTES Despite accepting a size_t number of bytes, these functions can transfer at most INT_MAX bytes per call (the maximum for the underlying syscall interface). diff --git a/man/io_uring_prep_sendmsg.3 b/man/io_uring_prep_sendmsg.3 index 7bb7a5341..51d6ec17b 100644 --- a/man/io_uring_prep_sendmsg.3 +++ b/man/io_uring_prep_sendmsg.3 @@ -105,6 +105,22 @@ directly in the CQE .I res field. Some common error cases are: .TP +.B -EAGAIN +The operation would have blocked. io_uring normally arms internal poll and +retries the request once the socket is ready, so this result is the expected +outcome when +.B MSG_DONTWAIT +was set in the +.I msg_flags +of the +.I msghdr +argument. It can also occur without +.B MSG_DONTWAIT +when the request cannot make progress and io_uring stops retrying rather than +waiting indefinitely. Handle +.B -EAGAIN +as a transient condition and reissue the request. +.TP .B -ENOMEM The .BR ulimit (1)