我是rdma编程的新手,我目前正在使用ib动词和rdma cma建立一个简单的客户端/服务器,但已经碰壁了。我的服务器运行并等待连接,但我的客户端从未连接,因为它在rdma_create_qp()失败。我不确定可能需要哪些信息来帮助解决这个问题,但我会根据要求编辑所需的信息。(目前在我的代码中显示的相关信息的数据集)
qp_init_attr.send_cq = cq;
qp_init_attr.recv_cq = cq;
qp_init_attr.qp_type = IBV_QPT_RC;
qp_init_attr.cap.max_send_wr = 16;
qp_init_attr.cap.max_recv_wr = 16;
qp_init_attr.cap.max_send_sge = 8;
qp_init_attr.cap.max_recv_sge = 8;
if(rdma_create_qp(cm_id, pd, &qp_init_attr)){
fprintf(stderr, "Error, rdma_create_qp() failed: %s\n", strerror(errno));
return -1;
}
答案 0 :(得分:0)
来自librdmacm(https://github.com/linux-rdma/rdma-core/blob/master/librdmacm/cma.c)的git页面:
在以下情况下你会得到EINVAL:
答案 1 :(得分:0)
请勿使用cm_id调用。假设您在事件rdma_create_qp
上调用RDMA_CM_EVENT_ROUTE_RESOLVED
,则应使用evt->id
,这是您创建的客户端连接的rdma_id。