From ded4d988b734e4cafbbbd08d9687486b02497616 Mon Sep 17 00:00:00 2001 From: Sean Hefty Date: Thu, 4 Sep 2014 11:19:28 -0700 Subject: [PATCH] rsockets: Support calling listen multiple times on same rsocket 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 Signed-off-by: Sean Hefty --- src/rsocket.c | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/src/rsocket.c b/src/rsocket.c index 00d9a185..4833810a 100644 --- a/src/rsocket.c +++ b/src/rsocket.c @@ -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; } -- 2.46.0