From: Sean Hefty Date: Mon, 4 Jun 2012 20:14:42 +0000 (-0700) Subject: rsocket: Handle SHUT_RD/WR shutdown flags X-Git-Url: https://openfabrics.org/gitweb/?a=commitdiff_plain;h=f16748cbaea650f19805ddc6652895ca88d36a45;p=~shefty%2Flibrdmacm.git rsocket: Handle SHUT_RD/WR shutdown flags Sridhar Samudrala 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 --- diff --git a/src/rsocket.c b/src/rsocket.c index 8b1e9307..a1679f16 100644 --- a/src/rsocket.c +++ b/src/rsocket.c @@ -1593,6 +1593,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);