In case when the addr and port is bound, but the rdma_destroy_id is called instead of connection establishment, there is no possibility of binding to this port anymore.
1. cm_id = rdma_create_id( cma_event_handler, cb, ...);
2. rdma_bind_addr(cm_id, (struct sockaddr *)addr);
3. rdma_listen(cm_id, backlog);
5. cm_id = rdma_create_id( cma_event_handler, cb, ...);
6. rdma_bind_addr(cm_id, (struct sockaddr *)addr); //bind unsuccessfull
It seems the issue comes from the fact, that in cma_release_port from sys/ofed/drivers/infiniband/core/cma.c a sock_release call has been moved to iw_destroy_cm_id from iwcm.c file. It does work for normal operation, but the function is never reached when no connection is established. (compare rdma_destroy_id function in cma.c)
Navdeep can you have a look at this issue.
iw_destroy_cm_id() is your creation??