diff --git a/net/socket/getsockopt.c b/net/socket/getsockopt.c index 487642ca50..13d8bc0821 100644 --- a/net/socket/getsockopt.c +++ b/net/socket/getsockopt.c @@ -101,13 +101,6 @@ static int psock_socketlevel_option(FAR struct socket *psock, int option, return -EINVAL; } - /* Verify that the sockfd corresponds to valid, allocated socket */ - - if (psock == NULL || psock->s_crefs <= 0) - { - return -EBADF; - } - #ifdef CONFIG_NET_USRSOCK if (psock->s_type == SOCK_USRSOCK_TYPE) { @@ -342,6 +335,13 @@ int psock_getsockopt(FAR struct socket *psock, int level, int option, { int ret; + /* Verify that the sockfd corresponds to valid, allocated socket */ + + if (psock == NULL || psock->s_crefs <= 0) + { + return -EBADF; + } + /* Handle retrieval of the socket option according to the level at which * option should be applied. */ @@ -436,7 +436,7 @@ int getsockopt(int sockfd, int level, int option, void *value, socklen_t *value_ ret = psock_getsockopt(psock, level, option, value, value_len); if (ret < 0) { - set_errno(-ret); + _SO_SETERRNO(psock, -ret); return ERROR; } diff --git a/net/socket/setsockopt.c b/net/socket/setsockopt.c index 4169f308fb..e9684671c2 100644 --- a/net/socket/setsockopt.c +++ b/net/socket/setsockopt.c @@ -96,13 +96,6 @@ static int psock_socketlevel_option(FAR struct socket *psock, int option, return -EINVAL; } - /* Verify that the sockfd corresponds to valid, allocated socket */ - - if (psock == NULL || psock->s_crefs <= 0) - { - return -EBADF; - } - #ifdef CONFIG_NET_USRSOCK if (psock->s_type == SOCK_USRSOCK_TYPE) { @@ -362,6 +355,13 @@ int psock_setsockopt(FAR struct socket *psock, int level, int option, { int ret; + /* Verify that the sockfd corresponds to valid, allocated socket */ + + if (psock == NULL || psock->s_crefs <= 0) + { + return -EBADF; + } + /* Handle setting of the socket option according to the level at which * option should be applied. */ @@ -384,10 +384,6 @@ int psock_setsockopt(FAR struct socket *psock, int level, int option, break; #endif - /* These levels are defined in sys/socket.h, but are not yet - * implemented. - */ - #ifdef CONFIG_NET_IPv4 case SOL_IP: /* TCP protocol socket options (see include/netinet/in.h) */ ret = ipv4_setsockopt(psock, option, value, value_len); @@ -474,7 +470,7 @@ int setsockopt(int sockfd, int level, int option, const void *value, ret = psock_setsockopt(psock, level, option, value, value_len); if (ret < 0) { - set_errno(-ret); + _SO_SETERRNO(psock, -ret); return ERROR; }