]> git.openfabrics.org - ~shefty/librdmacm.git/commitdiff
rsockets: Support calling listen multiple times on same rsocket
authorSean Hefty <sean.hefty@intel.com>
Thu, 4 Sep 2014 18:19:28 +0000 (11:19 -0700)
committerSean Hefty <sean.hefty@intel.com>
Thu, 4 Sep 2014 18:19:28 +0000 (11:19 -0700)
Standard sockets allows an application to call listen() multiple
times on the same socket without error.  This allows a multi-threaded
app to call listen from all threads.

rsockets will fail the second listen call.  Modify the behavior to
match standard sockets.

Problem reported by: Sreedhar Kodali <srkodali@linux.vnet.ibm.com>

Signed-off-by: Sean Hefty <sean.hefty@intel.com>
src/rsocket.c

index 00d9a185bf01973b100e2c1ea2b41fc01a7882c2..4833810a8c91a254299d9a8e04a4a4ebb7105cb5 100644 (file)
@@ -1174,9 +1174,14 @@ int rlisten(int socket, int backlog)
        rs = idm_lookup(&idm, socket);
        if (!rs)
                return ERR(EBADF);
-       ret = rdma_listen(rs->cm_id, backlog);
-       if (!ret)
-               rs->state = rs_listening;
+
+       if (rs->state != rs_listening) {
+               ret = rdma_listen(rs->cm_id, backlog);
+               if (!ret)
+                       rs->state = rs_listening;
+       } else {
+               ret = 0;
+       }
        return ret;
 }