From c4ed55c6df9659145f1f2a52aa94edf23cb33eef Mon Sep 17 00:00:00 2001
From: ligd <liguiding1@xiaomi.com>
Date: Tue, 14 Feb 2023 13:32:41 +0800
Subject: [PATCH] socket: divide errno & s_error

Reference:
https: //man7.org/linux/man-pages/man2/connect.2.html

Signed-off-by: ligd <liguiding1@xiaomi.com>
---
 net/socket/accept.c       | 2 +-
 net/socket/bind.c         | 6 +++---
 net/socket/connect.c      | 2 +-
 net/socket/getpeername.c  | 6 +++---
 net/socket/getsockname.c  | 6 +++---
 net/socket/getsockopt.c   | 4 ++--
 net/socket/listen.c       | 6 +++---
 net/socket/net_sendfile.c | 5 -----
 net/socket/recvfrom.c     | 2 +-
 net/socket/recvmsg.c      | 2 +-
 net/socket/send.c         | 2 +-
 net/socket/sendmsg.c      | 2 +-
 net/socket/sendto.c       | 2 +-
 net/socket/shutdown.c     | 2 +-
 net/socket/socket.h       | 9 ++-------
 net/tcp/tcp_netpoll.c     | 5 ++++-
 16 files changed, 28 insertions(+), 35 deletions(-)

diff --git a/net/socket/accept.c b/net/socket/accept.c
index 5a55e04165..ba79296447 100644
--- a/net/socket/accept.c
+++ b/net/socket/accept.c
@@ -313,6 +313,6 @@ errout_with_alloc:
 errout:
   leave_cancellation_point();
 
-  _SO_SETERRNO(psock, errcode);
+  set_errno(errcode);
   return ERROR;
 }
diff --git a/net/socket/bind.c b/net/socket/bind.c
index a638beaa2a..08e6c90ba9 100644
--- a/net/socket/bind.c
+++ b/net/socket/bind.c
@@ -152,11 +152,11 @@ int bind(int sockfd, const struct sockaddr *addr, socklen_t addrlen)
 
   if (ret < 0)
     {
-      _SO_SETERRNO(psock, -ret);
-      return ERROR;
+      set_errno(-ret);
+      ret = ERROR;
     }
 
-  return OK;
+  return ret;
 }
 
 #endif /* CONFIG_NET */
diff --git a/net/socket/connect.c b/net/socket/connect.c
index 5813a555be..99266a173d 100644
--- a/net/socket/connect.c
+++ b/net/socket/connect.c
@@ -237,7 +237,7 @@ int connect(int sockfd, FAR const struct sockaddr *addr, socklen_t addrlen)
 
   if (ret < 0)
     {
-      _SO_SETERRNO(psock, -ret);
+      set_errno(-ret);
       ret = ERROR;
     }
 
diff --git a/net/socket/getpeername.c b/net/socket/getpeername.c
index ec29dbbbea..b86a746ae7 100644
--- a/net/socket/getpeername.c
+++ b/net/socket/getpeername.c
@@ -161,11 +161,11 @@ int getpeername(int sockfd, FAR struct sockaddr *addr,
 
   if (ret < 0)
     {
-      _SO_SETERRNO(psock, -ret);
-      return ERROR;
+      set_errno(-ret);
+      ret = ERROR;
     }
 
-  return OK;
+  return ret;
 }
 
 #endif /* CONFIG_NET */
diff --git a/net/socket/getsockname.c b/net/socket/getsockname.c
index b7a4e417b9..a2ce0152ad 100644
--- a/net/socket/getsockname.c
+++ b/net/socket/getsockname.c
@@ -155,11 +155,11 @@ int getsockname(int sockfd, FAR struct sockaddr *addr,
 
   if (ret < 0)
     {
-      _SO_SETERRNO(psock, -ret);
-      return ERROR;
+      set_errno(-ret);
+      ret = ERROR;
     }
 
-  return OK;
+  return ret;
 }
 
 #endif /* CONFIG_NET */
diff --git a/net/socket/getsockopt.c b/net/socket/getsockopt.c
index 8eceed0e91..fc38a9a9f5 100644
--- a/net/socket/getsockopt.c
+++ b/net/socket/getsockopt.c
@@ -362,10 +362,10 @@ int getsockopt(int sockfd, int level, int option,
   if (ret < 0)
     {
       set_errno(-ret);
-      return ERROR;
+      ret = ERROR;
     }
 
-  return OK;
+  return ret;
 }
 
 #endif /* CONFIG_NET && CONFIG_NET_SOCKOPTS */
diff --git a/net/socket/listen.c b/net/socket/listen.c
index 4ab2bc505c..4e11b0743e 100644
--- a/net/socket/listen.c
+++ b/net/socket/listen.c
@@ -150,9 +150,9 @@ int listen(int sockfd, int backlog)
 
   if (ret < 0)
     {
-      _SO_SETERRNO(psock, -ret);
-      return ERROR;
+      set_errno(-ret);
+      ret = ERROR;
     }
 
-  return OK;
+  return ret;
 }
diff --git a/net/socket/net_sendfile.c b/net/socket/net_sendfile.c
index e9ef41eb78..441dc0d8c3 100644
--- a/net/socket/net_sendfile.c
+++ b/net/socket/net_sendfile.c
@@ -131,11 +131,6 @@ ssize_t psock_sendfile(FAR struct socket *psock, FAR struct file *infile,
       ret = psock->s_sockif->si_sendfile(psock, infile, offset, count);
     }
 
-  if (ret < 0)
-    {
-      _SO_SETERRNO(psock, -ret);
-    }
-
   return ret;
 }
 
diff --git a/net/socket/recvfrom.c b/net/socket/recvfrom.c
index 11ee35b0b2..5d03866943 100644
--- a/net/socket/recvfrom.c
+++ b/net/socket/recvfrom.c
@@ -170,7 +170,7 @@ ssize_t recvfrom(int sockfd, FAR void *buf, size_t len, int flags,
 
   if (ret < 0)
     {
-      _SO_SETERRNO(psock, -ret);
+      set_errno(-ret);
       ret = ERROR;
     }
 
diff --git a/net/socket/recvmsg.c b/net/socket/recvmsg.c
index bf99f731f3..877f6f80ea 100644
--- a/net/socket/recvmsg.c
+++ b/net/socket/recvmsg.c
@@ -168,7 +168,7 @@ ssize_t recvmsg(int sockfd, FAR struct msghdr *msg, int flags)
 
   if (ret < 0)
     {
-      _SO_SETERRNO(psock, -ret);
+      set_errno(-ret);
       ret = ERROR;
     }
 
diff --git a/net/socket/send.c b/net/socket/send.c
index 9c17e20264..8ddf95b029 100644
--- a/net/socket/send.c
+++ b/net/socket/send.c
@@ -176,7 +176,7 @@ ssize_t send(int sockfd, FAR const void *buf, size_t len, int flags)
 
   if (ret < 0)
     {
-      _SO_SETERRNO(psock, -ret);
+      set_errno(-ret);
       ret = ERROR;
     }
 
diff --git a/net/socket/sendmsg.c b/net/socket/sendmsg.c
index 202fe9e220..ce889b7193 100644
--- a/net/socket/sendmsg.c
+++ b/net/socket/sendmsg.c
@@ -158,7 +158,7 @@ ssize_t sendmsg(int sockfd, FAR struct msghdr *msg, int flags)
 
   if (ret < 0)
     {
-      _SO_SETERRNO(psock, -ret);
+      set_errno(-ret);
       ret = ERROR;
     }
 
diff --git a/net/socket/sendto.c b/net/socket/sendto.c
index 96458337b2..8c36ee2ef8 100644
--- a/net/socket/sendto.c
+++ b/net/socket/sendto.c
@@ -216,7 +216,7 @@ ssize_t sendto(int sockfd, FAR const void *buf, size_t len, int flags,
 
   if (ret < 0)
     {
-      _SO_SETERRNO(psock, -ret);
+      set_errno(-ret);
       ret = ERROR;
     }
 
diff --git a/net/socket/shutdown.c b/net/socket/shutdown.c
index b0a75e7803..fcf4db82e3 100644
--- a/net/socket/shutdown.c
+++ b/net/socket/shutdown.c
@@ -141,7 +141,7 @@ int shutdown(int sockfd, int how)
 
   if (ret < 0)
     {
-      _SO_SETERRNO(psock, -ret);
+      set_errno(-ret);
       ret = ERROR;
     }
 
diff --git a/net/socket/socket.h b/net/socket/socket.h
index 71b86be784..b824bc2aa1 100644
--- a/net/socket/socket.h
+++ b/net/socket/socket.h
@@ -103,7 +103,6 @@
               (FAR struct socket_conn_s *)(c); \
             _conn->s_error = (int16_t)e; \
           } \
-        set_errno(e); \
       } \
     while (0)
 
@@ -114,15 +113,11 @@
           { \
             _SO_CONN_SETERRNO((s)->s_conn, e); \
           } \
-        else \
-          { \
-            set_errno(e); \
-          } \
       } \
     while (0)
 #else
-#  define _SO_CONN_SETERRNO(c,e) set_errno(e)
-#  define _SO_SETERRNO(s,e) set_errno(e)
+#  define _SO_CONN_SETERRNO(c,e)
+#  define _SO_SETERRNO(s,e)
 #endif /* CONFIG_NET_SOCKOPTS */
 
 /****************************************************************************
diff --git a/net/tcp/tcp_netpoll.c b/net/tcp/tcp_netpoll.c
index 446d5452a1..b5e9893d40 100644
--- a/net/tcp/tcp_netpoll.c
+++ b/net/tcp/tcp_netpoll.c
@@ -67,7 +67,6 @@ static uint16_t tcp_poll_eventhandler(FAR struct net_driver_s *dev,
                                       FAR void *pvpriv, uint16_t flags)
 {
   FAR struct tcp_poll_s *info = pvpriv;
-  int reason;
 
   ninfo("flags: %04x\n", flags);
 
@@ -97,6 +96,9 @@ static uint16_t tcp_poll_eventhandler(FAR struct net_driver_s *dev,
 
       if ((flags & TCP_DISCONN_EVENTS) != 0)
         {
+#ifdef CONFIG_NET_SOCKOPTS
+          int reason;
+
           /* TCP_TIMEDOUT: Connection aborted due to too many
            *               retransmissions.
            */
@@ -129,6 +131,7 @@ static uint16_t tcp_poll_eventhandler(FAR struct net_driver_s *dev,
             }
 
           _SO_CONN_SETERRNO(info->conn, reason);
+#endif
 
           /* Mark that the connection has been lost */