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
