This is an automated email from the ASF dual-hosted git repository.

xiaoxiang781216 pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/nuttx.git

commit 7d054892a7541c88ceef590d0c506a04998e4529
Author: Yongrong Wang <[email protected]>
AuthorDate: Mon Oct 20 19:32:02 2025 +0800

    vsock: fix vsock poll recv data can not close error
    
    vsock poll need set POLLIN when conn set SHUT_RD
    vsock recv need return when conn set SHUT_RD before return EAGAIN
    
    Signed-off-by: Yongrong Wang <[email protected]>
---
 net/vsock/vsock_sockif.c | 14 ++++++--------
 1 file changed, 6 insertions(+), 8 deletions(-)

diff --git a/net/vsock/vsock_sockif.c b/net/vsock/vsock_sockif.c
index 87d611ea61a..53e7f2309f3 100644
--- a/net/vsock/vsock_sockif.c
+++ b/net/vsock/vsock_sockif.c
@@ -53,8 +53,8 @@
 #define VSOCK_NOTIFY_SEND        3
 #define VSOCK_NOTIFY_SHUTDOWN    4
 
-#define VSOCK_IS_SHUTDOWN_RD(s)  ((s) == SHUT_RD)
-#define VSOCK_IS_SHUTDOWN_WR(s)  ((s) == SHUT_WR)
+#define VSOCK_IS_SHUTDOWN_RD(s)  ((s) & SHUT_RD)
+#define VSOCK_IS_SHUTDOWN_WR(s)  ((s) & SHUT_WR)
 #define VSOCK_IS_SHUTDOWN(s)     ((s) == SHUT_RDWR)
 
 #define VSOCK_LAST_RESERVED_PORT 1024
@@ -2080,6 +2080,10 @@ static ssize_t vsock_recvmsg(FAR struct socket *psock,
     {
       vsock_update_rx_credit(conn, ret);
     }
+  else if (VSOCK_IS_SHUTDOWN_RD(conn->shutdown))
+    {
+      ret = 0;
+    }
   else if (_SS_ISNONBLOCK(conn->sconn.s_flags) ||
            (flags & MSG_DONTWAIT) != 0)
     {
@@ -2087,12 +2091,6 @@ static ssize_t vsock_recvmsg(FAR struct socket *psock,
     }
   else /* ret == 0 */
     {
-      if (conn->shutdown & SHUT_RD)
-        {
-          vsock_rx_unlock(conn);
-          return 0;
-        }
-
       /* No data recv, setup the user msg and wait */
 
       DEBUGASSERT(ret == 0);

Reply via email to