DOKK / manpages / debian 12 / librpma-dev / rpma_srq_recv.3.en
rpma_srq_recv(3) RPMA Programmer's Manual rpma_srq_recv(3)

rpma_srq_recv - initiate the receive operation in shared RQ


#include <librpma.h>
struct rpma_srq;
struct rpma_mr_local;
int rpma_srq_recv(struct rpma_srq *srq, struct rpma_mr_local *dst, size_t offset,
size_t len, const void *op_context);

If multiple local connections use a shared RQ, rpma_srq_recv() initiates the receive operation which prepares a buffer for a message sent from other side of these connections. Please see rpma_send(3).

All buffers prepared via rpma_srq_recv(3) form an unordered set. When a message arrives it is placed in one of the buffers awaiting and a completion for the receive operation is generated.

A buffer for an incoming message has to be prepared beforehand.

The order of buffers in the set does not affect the order of completions of the receive operations got via rpma_cq_get_wc(3).

op_context is returned in the wr_id field of the completion (struct ibv_wc).

In the RDMA standard, receive requests form an ordered queue. The librpma library does NOT inherit this guarantee.

The rpma_srq_recv() function returns 0 on success or a negative error code on failure.

rpma_srq_recv() can fail with the following errors:

  • RPMA_E_INVAL - srq == NULL
  • RPMA_E_INVAL - dst == NULL && (offset != 0 || len != 0)
  • RPMA_E_PROVIDER - ibv_post_srq_recv(3) failed

rpma_mr_reg(3), rpma_srq_new(3), librpma(7) and https://pmem.io/rpma/

10 January 2023 RPMA