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

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

commit 7a4a6ce4ce11c5d8de3025f83fe496d4c14e9341
Author: daichuan <[email protected]>
AuthorDate: Tue Aug 26 19:44:29 2025 +0800

    usrsock: Avoid frequent POLLIN when remote close during accept.
    
    Clear USRSOCK_EVENT_RECVFROM_AVAIL flag when remote closes connection 
during accept to prevent repeated POLLIN events and EPIPE loop.
    
    Signed-off-by: daichuan <[email protected]>
---
 net/usrsock/usrsock_accept.c | 1 +
 net/usrsock/usrsock_poll.c   | 8 +++++++-
 2 files changed, 8 insertions(+), 1 deletion(-)

diff --git a/net/usrsock/usrsock_accept.c b/net/usrsock/usrsock_accept.c
index 880be40edbc..75057eda6da 100644
--- a/net/usrsock/usrsock_accept.c
+++ b/net/usrsock/usrsock_accept.c
@@ -297,6 +297,7 @@ int usrsock_accept(FAR struct socket *psock, FAR struct 
sockaddr *addr,
         {
           ninfo("usockid=%d; remote closed (EOF).\n", conn->usockid);
 
+          conn->flags &= ~USRSOCK_EVENT_RECVFROM_AVAIL;
           ret = -EPIPE;
           goto errout_free_conn;
         }
diff --git a/net/usrsock/usrsock_poll.c b/net/usrsock/usrsock_poll.c
index 8ee80097340..9c074d7e3d1 100644
--- a/net/usrsock/usrsock_poll.c
+++ b/net/usrsock/usrsock_poll.c
@@ -83,7 +83,13 @@ static uint32_t poll_event(FAR struct net_driver_s *dev,
 
       /* Remote closed. */
 
-      eventset |= (POLLHUP | POLLIN);
+      eventset |= POLLHUP;
+      if (flags & USRSOCK_EVENT_RECVFROM_AVAIL)
+        {
+          ninfo("socket recv avail.\n");
+
+          eventset |= POLLIN;
+        }
     }
   else
     {

Reply via email to