RDMA_READ_COMPLETE,
RDMA_WRITE_ADV,
RDMA_WRITE_COMPLETE,
+ DISCONNECTED,
ERROR
};
case RDMA_CM_EVENT_DISCONNECTED:
fprintf(stderr, "%s DISCONNECT EVENT...\n",
cb->server ? "server" : "client");
+ cb->state = DISCONNECTED;
sem_post(&cb->sem);
break;
DEBUG_LOG("server posted go ahead\n");
}
- return ret;
+ return (cb->state == DISCONNECTED) ? 0 : ret;
}
static int rping_bind_server(struct rping_cb *cb)
printf("ping data: %s\n", cb->rdma_buf);
}
- return ret;
+ return (cb->state == DISCONNECTED) ? 0 : ret;
}
static int rping_connect_client(struct rping_cb *cb)
cb->cm_channel = rdma_create_event_channel();
if (!cb->cm_channel) {
perror("rdma_create_event_channel");
- ret = ENOMEM;
+ ret = errno;
goto out;
}