From: Sean Hefty Date: Thu, 10 May 2012 18:17:32 +0000 (-0700) Subject: librdmacm/rsocket: Succeed setsockopt REUSEADDR on connected sockets X-Git-Url: https://openfabrics.org/gitweb/?a=commitdiff_plain;h=0ac9e7124c0c6adf63350011f8eaf07b654d5f49;p=~shefty%2Flibrdmacm.git librdmacm/rsocket: Succeed setsockopt REUSEADDR on connected sockets The RDMA CM fail calls to set REUSEADDR on an rdma_cm_id if it is not in the idle state. As a result, this causes a failure in NetPipe when is run with socket calls intercepted by rsockets. Fix this by returning success when REUSEADDR is set on an rsocket that has already been connected. When running over IB, REUSEADDR is not necessary, since the TCP/IP addresses are mapped. Signed-off-by: Sean Hefty --- diff --git a/src/rsocket.c b/src/rsocket.c index 2ffde9bb..de0ec3e5 100644 --- a/src/rsocket.c +++ b/src/rsocket.c @@ -1621,7 +1621,9 @@ int rsetsockopt(int socket, int level, int optname, ret = rdma_set_option(rs->cm_id, RDMA_OPTION_ID, RDMA_OPTION_ID_REUSEADDR, (void *) optval, optlen); - if (ret && errno == ENOSYS) + if (ret && ((errno == ENOSYS) || ((rs->state != rs_init) && + rs->cm_id->context && + (rs->cm_id->verbs->device->transport_type == IBV_TRANSPORT_IB)))) ret = 0; opt_on = *(int *) optval; break;