RDMA_POST_RECV(3)
π RDMA_POST_RECV(3) β the librdmacm programmer's manual, but make it cute
okay so bestie, welcome to the glow-up of rdma_post_recv from the librdmacm Programmer's Manual. this is the one where you tell the network "hey, i'm ready to receive, send me stuff" π«Ά
β¨ NAME β¨
rdma_post_recv β post a work request to receive an incoming message. literally just "inbox open, bestie" π
πΈ SYNOPSIS πΈ
#include <rdma/rdma_verbs.h>
int rdma_post_recv (struct rdma_cm_id *id, void *context, void *addr,
size_t length, struct ibv_mr *mr);
no cap, that's the whole signature. five little arguments and you're posting π
π¦ ARGUMENTS π¦
idβ a reference to a communication identifier where the message buffer will be posted. this is your main character, therdma_cm_ideverything hangs off of β¨contextβ user-defined context associated with the request. put whatever you want in here, it's your little emotional support pointer πaddrβ the address of the memory buffer to post. the actual spot where the incoming data is gonna land πlengthβ the length of the memory buffer. how much room you're giving it, be generous πmrβ a registered memory region associated with the posted buffer. registered, bestie, don't forget π§
π DESCRIPTION π
Posts a work request to the receive queue of the queue pair associated with the rdma_cm_id. the posted buffer will be queued to receive an incoming message sent by the remote peer.
that's it. that's the vibe. you drop a buffer into the receive queue, and it sits there patiently waiting like a girl who texted first and is now refreshing π₯²
π RETURN VALUE π
Returns 0 on success, or -1 on error. and if it's an error? errno will be set to indicate the failure reason. so check it, don't just assume, okay? π
π₯ NOTES π₯
okay this part actually matters so listen up bestie:
- the user is responsible for ensuring that a receive buffer is posted and large enough to contain all sent data before the peer posts the corresponding send message. if you're late, that's on you π
- the message buffer must have been registered before being posted, with the
mrparameter referencing the registration. - the buffer must remain registered until the receive completes. do not un-register it early, i am begging π
- messages may be posted to an
rdma_cm_idonly after a queue pair has been associated with it. a queue pair is bound to anrdma_cm_idafter callingrdma_create_eporrdma_create_qp, if therdma_cm_idis allocated usingrdma_create_id. - the user-defined context associated with the receive request will be returned to the user through the work completion
wr_id, work request identifier, field. so thatcontextyou passed in? it comes back to you. it's giving boomerang πͺ
ngl the ordering rules here are not a suggestion, they're the whole plot. post the buffer first, keep it registered, and only post after the qp is associated. periodt. π
π SEE ALSO π
rdma_cm(7)rdma_create_id(3)rdma_create_ep(3)rdma_create_qp(3)rdma_reg_read(3)ibv_reg_mr(3)ibv_dereg_mr(3)rdma_post_recvv(3)rdma_post_send(3)
librdmacm Β· 2010-07-19 β and that's the whole page, bestie. go forth and receive, you absolute icon ππβ¨
π¦ where this page comes from
- alpine 3.24: rdma-core-doc 61.0-r0 Β· GPL-2.0-only OR BSD-2-Clause
- arch rolling: rdma-core 65.0-1 Β· GPL-2.0-or-later OR LicenseRef-OpenIB.org-BSD-MIT AND GPL-2.0-or-later OR LicenseRef-OpenIB.org-BSD-FreeBSD AND GPL-2.0-or-later OR LicenseRef-Intel-BSD-3-Clause AND GPL-2.0-or-later OR LicenseRef-PathScale-BSD-Patent-License AND CC0-1.0 AND MIT AND BSD-2-Clause AND CPL-1.0 OR BSD-2-Clause OR GPL-2.0-or-later
- centos-stream 10: rdma-core-devel 62.0-3.el10 Β· GPLv2 or BSD
- centos-stream 9: rdma-core-devel 61.0-3.el9 Β· GPLv2 or BSD
- centos-stream 9: rdma-core-devel 61.0-3.el9 Β· GPLv2 or BSD
- debian bookworm: librdmacm-dev 44.0-2 Β· BSD-MIT OR GPL-2.0-only
- debian trixie: librdmacm-dev 56.1-1 Β· BSD-MIT OR GPL-2.0-only
- fedora 43: rdma-core-devel 58.0-4.fc43 Β· GPL-2.0-only OR BSD-2-Clause AND BSD-3-Clause
- fedora 43: rdma-core-devel 58.0-4.fc43 Β· GPL-2.0-only OR BSD-2-Clause AND BSD-3-Clause
- fedora 44: rdma-core-devel 61.0-2.fc44 Β· GPL-2.0-only OR BSD-2-Clause AND BSD-3-Clause
- fedora 44: rdma-core-devel 61.0-2.fc44 Β· GPL-2.0-only OR BSD-2-Clause AND BSD-3-Clause
- fedora 44: rdma-core-devel 61.1^20260812git975bdaf-1.fc44 Β· GPL-2.0-only OR BSD-2-Clause AND BSD-3-Clause
- fedora 44: rdma-core-devel 61.1^20260812git975bdaf-1.fc44 Β· GPL-2.0-only OR BSD-2-Clause AND BSD-3-Clause
- freebsd 14.5: base 14.5
- freebsd 15.1: base 15.1
- nixos 26.05: rdma-core 62.0
- nixpkgs unstable: rdma-core 65.0
- opensuse-leap 16.0: rdma-core-devel 56.1-160000.2.2 Β· BSD-2-Clause OR GPL-2.0-only
- opensuse-leap 16.0: rdma-core-devel 56.1-160000.2.2 Β· BSD-2-Clause OR GPL-2.0-only
- opensuse-leap 16.0: rdma-core-devel 56.1-160000.2.2 Β· BSD-2-Clause OR GPL-2.0-only
- opensuse-leap 16.0: rdma-core-devel 56.1-160000.2.2 Β· BSD-2-Clause OR GPL-2.0-only
- ubuntu jammy: librdmacm-dev 39.0-1 Β· BSD-MIT OR GPL-2.0-only
- ubuntu noble: librdmacm-dev 50.0-2build2 Β· BSD-MIT OR GPL-2.0-only
- ubuntu noble: librdmacm-dev 50.0-2ubuntu0.2 Β· BSD-MIT OR GPL-2.0-only
- ubuntu questing: librdmacm-dev 56.1-1ubuntu1
- ubuntu resolute: librdmacm-dev 61.0-2ubuntu3 Β· BSD-MIT OR GPL-2.0-only
- ubuntu stonking: librdmacm-dev 64.0-1ubuntu1 Β· BSD-MIT OR GPL-2.0-only
- π girlified by deepseek-ai/DeepSeek-V4.1-Flash on : a language model's rewrite of the original, under its terms