You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@nuttx.apache.org by ma...@apache.org on 2022/11/23 12:27:23 UTC

[incubator-nuttx] branch master updated: net/usrsock: fix get/setsockopt issue about usrsock protocol

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

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


The following commit(s) were added to refs/heads/master by this push:
     new d5b08a7ef1 net/usrsock: fix get/setsockopt issue about usrsock protocol
d5b08a7ef1 is described below

commit d5b08a7ef1797466ae79bd9845c5ba41c471e539
Author: dongjiuzhu1 <do...@xiaomi.com>
AuthorDate: Wed Nov 23 18:11:11 2022 +0800

    net/usrsock: fix get/setsockopt issue about usrsock protocol
    
    Signed-off-by: dongjiuzhu1 <do...@xiaomi.com>
---
 net/socket/getsockopt.c          | 13 ++++++++++++-
 net/socket/setsockopt.c          | 14 +++++++++++++-
 net/usrsock/usrsock_getsockopt.c |  2 +-
 net/usrsock/usrsock_setsockopt.c |  4 ----
 4 files changed, 26 insertions(+), 7 deletions(-)

diff --git a/net/socket/getsockopt.c b/net/socket/getsockopt.c
index f2f45e73e2..e2f815b55c 100644
--- a/net/socket/getsockopt.c
+++ b/net/socket/getsockopt.c
@@ -33,6 +33,7 @@
 #include <errno.h>
 
 #include "socket/socket.h"
+#include "usrsock/usrsock.h"
 #include "utils/utils.h"
 
 /****************************************************************************
@@ -123,9 +124,19 @@ static int psock_socketlevel_option(FAR struct socket *psock, int option,
 
           net_dsec2timeval(timeo, (struct timeval *)value);
           *value_len   = sizeof(struct timeval);
+          return OK;
         }
-        break;
+    }
 
+#ifdef CONFIG_NET_USRSOCK
+  if (psock->s_type == SOCK_USRSOCK_TYPE)
+    {
+      return -ENOPROTOOPT;
+    }
+#endif
+
+  switch (option)
+    {
       case SO_ACCEPTCONN: /* Reports whether socket listening is enabled */
         {
           if (*value_len < sizeof(int))
diff --git a/net/socket/setsockopt.c b/net/socket/setsockopt.c
index a7ede25744..e2a13af450 100644
--- a/net/socket/setsockopt.c
+++ b/net/socket/setsockopt.c
@@ -38,6 +38,7 @@
 #include <netdev/netdev.h>
 
 #include "socket/socket.h"
+#include "usrsock/usrsock.h"
 #include "utils/utils.h"
 
 /****************************************************************************
@@ -130,9 +131,20 @@ static int psock_socketlevel_option(FAR struct socket *psock, int option,
             {
               _SO_SETOPT(conn->s_options, option);
             }
+
+          return OK;
         }
-        break;
+    }
 
+#ifdef CONFIG_NET_USRSOCK
+  if (psock->s_type == SOCK_USRSOCK_TYPE)
+    {
+      return -ENOPROTOOPT;
+    }
+#endif
+
+  switch (option)
+    {
       case SO_BROADCAST:  /* Permits sending of broadcast messages */
       case SO_DEBUG:      /* Enables recording of debugging information */
       case SO_DONTROUTE:  /* Requests outgoing messages bypass standard routing */
diff --git a/net/usrsock/usrsock_getsockopt.c b/net/usrsock/usrsock_getsockopt.c
index 07f57a26e8..393f79dd20 100644
--- a/net/usrsock/usrsock_getsockopt.c
+++ b/net/usrsock/usrsock_getsockopt.c
@@ -189,7 +189,7 @@ int usrsock_getsockopt(FAR struct socket *psock, int level, int option,
           *value_len = sizeof(int);
           return OK;
         }
-      else
+      else if (option == SO_RCVTIMEO || option == SO_SNDTIMEO)
         {
           return -ENOPROTOOPT;
         }
diff --git a/net/usrsock/usrsock_setsockopt.c b/net/usrsock/usrsock_setsockopt.c
index 922da98e27..3fc2c16c13 100644
--- a/net/usrsock/usrsock_setsockopt.c
+++ b/net/usrsock/usrsock_setsockopt.c
@@ -174,10 +174,6 @@ int usrsock_setsockopt(FAR struct socket *psock, int level, int option,
         {
           return -ENOPROTOOPT;
         }
-      else
-        {
-          return -EINVAL;
-        }
     }
 
   net_lock();