Support MSG_WAITALL flag with recv() when using rsockets.
Signed-off-by: Sridhar Samudrala <[email protected]>
diff --git a/src/rsocket.c b/src/rsocket.c
index b9105a1..81f2654 100644
--- a/src/rsocket.c
+++ b/src/rsocket.c
@@ -1131,6 +1131,7 @@ ssize_t rrecv(int socket, void *buf, size_t len, int
flags)
}
}
fastlock_acquire(&rs->rlock);
+waitall:
if (!rs_have_rdata(rs)) {
ret = rs_get_comp(rs, rs_nonblocking(rs, flags),
rs_conn_have_rdata);
if (ret)
@@ -1167,6 +1168,10 @@ ssize_t rrecv(int socket, void *buf, size_t len, int
flags)
buf += rsize;
}
rs->rbuf_bytes_avail += len - left;
+
+ if ((flags & MSG_WAITALL) && left)
+ goto waitall;
+
out:
fastlock_release(&rs->rlock);
return ret ? ret : len - left;
--
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