---
name: "rpma_srq_recv"
section: "3"
platform: "linux"
package: "librpma-dev"
version: "1.3.0-2+b3"
release: "Debian 13 (Trixie)"
platforms: ["linux"]
url: "https://new.carta.tech/rpma_srq_recv"
---

# rpma\_srq\_recv(3)

initiate the receive operation in shared RQ

## NAME

**rpma\_srq\_recv** - initiate the receive operation in shared RQ

## SYNOPSIS

```
      #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);
```

## DESCRIPTION

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)](/rpma_send/3.md).

All buffers prepared via [**rpma\_srq\_recv**(3)](/rpma_srq_recv/3.md) 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)](/rpma_cq_get_wc/3.md).

op\_context is returned in the wr\_id field of the completion (struct ibv\_wc).

## NOTE

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

## RETURN VALUE

The **rpma\_srq\_recv**() function returns 0 on success or a negative error code on failure.

## ERRORS

**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)](/ibv_post_srq_recv/3.md) failed

## SEE ALSO

[**rpma\_mr\_reg**(3)](/rpma_mr_reg/3.md), [**rpma\_srq\_new**(3)](/rpma_srq_new/3.md), [**librpma**(7)](/librpma/7.md) and https://pmem.io/rpma/
