summaryrefslogtreecommitdiff
path: root/nuttx/net/socket/bind.c
diff options
context:
space:
mode:
Diffstat (limited to 'nuttx/net/socket/bind.c')
-rw-r--r--nuttx/net/socket/bind.c44
1 files changed, 27 insertions, 17 deletions
diff --git a/nuttx/net/socket/bind.c b/nuttx/net/socket/bind.c
index 2cde978f9..d905e5aaf 100644
--- a/nuttx/net/socket/bind.c
+++ b/nuttx/net/socket/bind.c
@@ -44,6 +44,7 @@
#include <sys/socket.h>
#include <errno.h>
#include <string.h>
+#include <debug.h>
#ifdef CONFIG_NET_PKT
# include <netpacket/packet.h>
@@ -146,6 +147,7 @@ int psock_bind(FAR struct socket *psock, const struct sockaddr *addr,
#ifdef CONFIG_NET_PKT
FAR const struct sockaddr_ll *lladdr = (const struct sockaddr_ll *)addr;
#endif
+ socklen_t minlen;
int err;
int ret = OK;
@@ -159,27 +161,35 @@ int psock_bind(FAR struct socket *psock, const struct sockaddr *addr,
/* Verify that a valid address has been provided */
- if (
- (
-#if defined(CONFIG_NET_PKT)
- addr->sa_family != AF_PACKET &&
-#endif
-#if defined(CONFIG_NET_IPv6)
- addr->sa_family != AF_INET6
-#else
- addr->sa_family != AF_INET
+ switch (addr->sa_family)
+ {
+#ifdef CONFIG_NET_IPv4
+ case AF_INET:
+ minlen = sizeof(struct sockaddr_in);
+ break;
#endif
- ) ||
-#if defined(CONFIG_NET_PKT)
- (addr->sa_family == AF_PACKET && addrlen < sizeof(struct sockaddr_ll)) ||
+
+#ifdef CONFIG_NET_IPv6
+ case AF_INET6:
+ minlen = sizeof(struct sockaddr_in6);
+ break;
#endif
-#if defined(CONFIG_NET_IPv6)
- (addr->sa_family == AF_INET6 && addrlen < sizeof(struct sockaddr_in6))
-#else
- (addr->sa_family == AF_INET && addrlen < sizeof(struct sockaddr_in))
+
+#ifdef CONFIG_NET_PKT
+ case AF_PACKET:
+ minlen = sizeof(struct sockaddr_ll);
+ break;
#endif
- )
+
+ default:
+ ndbg("ERROR: Unrecognized address family: %d\n", addr->sa_family);
+ err = EAFNOSUPPORT;
+ goto errout;
+ }
+
+ if (addrlen < minlen)
{
+ ndbg("ERROR: Invalid address length: %d < %d\n", addrlen, minlen);
err = EBADF;
goto errout;
}