Sridhar Samudrala <[email protected]> reported an error (EOPNOTSUPP)
after calling select().

The issue is that rshutdown(SHUT_WR) was called before select().
As part of shutdown, rsockets switches the underlying fd from
nonblocking to blocking to ensure that previously sent data has
completed.  shutdown(SHUT_WR) indicates that the socket should be
kept open for receiving data.

Delay handling the actual shutdown unless SHUT_RDWR is specified,
or the socket is closed.

Signed-off-by: Sean Hefty <[email protected]>
---
 src/rsocket.c |    3 +++
 1 files changed, 3 insertions(+), 0 deletions(-)

diff --git a/src/rsocket.c b/src/rsocket.c
index c111797..8f20b4a 100644
--- a/src/rsocket.c
+++ b/src/rsocket.c
@@ -1592,6 +1592,9 @@ int rshutdown(int socket, int how)
        struct rsocket *rs;
        int ret = 0;
 
+       if (how != SHUT_RDWR)
+               return 0;
+
        rs = idm_at(&idm, socket);
        if (rs->fd_flags & O_NONBLOCK)
                rs_set_nonblocking(rs, 0);


--
To unsubscribe from this list: send the line "unsubscribe linux-rdma" in
the body of a message to [email protected]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to