The client operation section
provides a general overview of the basic operation for the active,
or client side of communication. A general connection flow is described
in the following:
- rdma_create_event_channel
- Creates a channel to receive events.
- rdma_create_id
- Allocates an rdma_cm_id that is conceptually similar to a socket.
- rdma_resolve_addr
- Obtains a local RDMA device to reach the remote address.
- rdma_get_cm_event
- Waits for the RDMA_CM_EVENT_ADDR_RESOLVED event.
- rdma_ack_cm_event
- Acknowledges the received event.
- rdma_create_qp
- Allocates a QP for the communication.
- rdma_resolve_route
- Determines the route to the remote address.
- rdma_get_cm_event
- Waits for the RDMA_CM_EVENT_ROUTE_RESOLVED event.
- rdma_ack_cm_event
- Acknowledges the received event.
- rdma_connect
- Connects to the remote server.
- rdma_get_cm_event
- Waits for the RDMA_CM_EVENT_ESTABLISHED event.
- rdma_ack_cm_event
- Acknowledges the received event.
- Performs data transfer over the connection.
- rdma_disconnect
- Tears down the connection.
- rdma_get_cm_event
- Waits for the RDMA_CM_EVENT_DISCONNECTED event.
- rdma_ack_cm_event
- Acknowledges the event.
- rdma_destroy_qp
- Destroys the QP.
- rdma_destroy_id
- Releases the rdma_cm_id.
- rdma_destroy_event_channel
- Releases the event channel.
Note: The example shows the client initiating the disconnect, but
either side of a connection might initiate the disconnect process.