librpma API version 1.1.0

librpma.7 rpma_atomic_write.3 rpma_conn_apply_remote_peer_cfg.3 rpma_conn_cfg_delete.3 rpma_conn_cfg_get_compl_channel.3 rpma_conn_cfg_get_cq_size.3 rpma_conn_cfg_get_rcq_size.3 rpma_conn_cfg_get_rq_size.3 rpma_conn_cfg_get_sq_size.3 rpma_conn_cfg_get_srq.3 rpma_conn_cfg_get_timeout.3 rpma_conn_cfg_new.3 rpma_conn_cfg_set_compl_channel.3 rpma_conn_cfg_set_cq_size.3 rpma_conn_cfg_set_rcq_size.3 rpma_conn_cfg_set_rq_size.3 rpma_conn_cfg_set_sq_size.3 rpma_conn_cfg_set_srq.3 rpma_conn_cfg_set_timeout.3 rpma_conn_delete.3 rpma_conn_disconnect.3 rpma_conn_get_compl_fd.3 rpma_conn_get_cq.3 rpma_conn_get_event_fd.3 rpma_conn_get_private_data.3 rpma_conn_get_qp_num.3 rpma_conn_get_rcq.3 rpma_conn_next_event.3 rpma_conn_req_connect.3 rpma_conn_req_delete.3 rpma_conn_req_get_private_data.3 rpma_conn_req_new.3 rpma_conn_req_recv.3 rpma_conn_wait.3 rpma_cq_get_fd.3 rpma_cq_get_wc.3 rpma_cq_wait.3 rpma_ep_get_fd.3 rpma_ep_listen.3 rpma_ep_next_conn_req.3 rpma_ep_shutdown.3 rpma_err_2str.3 rpma_flush.3 rpma_log_get_threshold.3 rpma_log_set_function.3 rpma_log_set_threshold.3 rpma_mr_advise.3 rpma_mr_dereg.3 rpma_mr_get_descriptor.3 rpma_mr_get_descriptor_size.3 rpma_mr_get_ptr.3 rpma_mr_get_size.3 rpma_mr_reg.3 rpma_mr_remote_delete.3 rpma_mr_remote_from_descriptor.3 rpma_mr_remote_get_flush_type.3 rpma_mr_remote_get_size.3 rpma_peer_cfg_delete.3 rpma_peer_cfg_from_descriptor.3 rpma_peer_cfg_get_descriptor.3 rpma_peer_cfg_get_descriptor_size.3 rpma_peer_cfg_get_direct_write_to_pmem.3 rpma_peer_cfg_new.3 rpma_peer_cfg_set_direct_write_to_pmem.3 rpma_peer_delete.3 rpma_peer_new.3 rpma_read.3 rpma_recv.3 rpma_send.3 rpma_send_with_imm.3 rpma_srq_cfg_delete.3 rpma_srq_cfg_get_rcq_size.3 rpma_srq_cfg_get_rq_size.3 rpma_srq_cfg_new.3 rpma_srq_cfg_set_rcq_size.3 rpma_srq_cfg_set_rq_size.3 rpma_srq_delete.3 rpma_srq_get_rcq.3 rpma_srq_new.3 rpma_srq_recv.3 rpma_utils_conn_event_2str.3 rpma_utils_get_ibv_context.3 rpma_utils_ibv_context_is_odp_capable.3 rpma_write.3 rpma_write_with_imm.3

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).

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).

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) failed

SEE ALSO

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

The contents of this web site and the associated GitHub repositories are BSD-licensed open source.