From ae613446c8dd36997efe4755a0e9de4a866e6a97 Mon Sep 17 00:00:00 2001 From: "chao.an" Date: Thu, 20 May 2021 18:14:54 +0800 Subject: [PATCH] net/icmp: add nonblocking support Signed-off-by: chao.an --- net/icmp/icmp_recvmsg.c | 7 +++++++ net/icmp/icmp_sockif.c | 2 +- net/icmpv6/icmpv6_recvmsg.c | 7 +++++++ net/icmpv6/icmpv6_sockif.c | 2 +- 4 files changed, 16 insertions(+), 2 deletions(-) diff --git a/net/icmp/icmp_recvmsg.c b/net/icmp/icmp_recvmsg.c index 4f2577d97ea..6fa661f2b11 100644 --- a/net/icmp/icmp_recvmsg.c +++ b/net/icmp/icmp_recvmsg.c @@ -399,6 +399,13 @@ ssize_t icmp_recvmsg(FAR struct socket *psock, FAR struct msghdr *msg, (FAR struct sockaddr_in *)from, fromlen); } + /* Handle non-blocking ICMP sockets */ + + if (_SS_ISNONBLOCK(psock->s_flags) || (flags & MSG_DONTWAIT) != 0) + { + return -EAGAIN; + } + /* Initialize the state structure */ memset(&state, 0, sizeof(struct icmp_recvfrom_s)); diff --git a/net/icmp/icmp_sockif.c b/net/icmp/icmp_sockif.c index be9b719936f..6985ada6da6 100644 --- a/net/icmp/icmp_sockif.c +++ b/net/icmp/icmp_sockif.c @@ -161,7 +161,7 @@ static int icmp_setup(FAR struct socket *psock, int protocol) static sockcaps_t icmp_sockcaps(FAR struct socket *psock) { - return 0; + return SOCKCAP_NONBLOCKING; } /**************************************************************************** diff --git a/net/icmpv6/icmpv6_recvmsg.c b/net/icmpv6/icmpv6_recvmsg.c index a4678e8f69d..ac8839f3860 100644 --- a/net/icmpv6/icmpv6_recvmsg.c +++ b/net/icmpv6/icmpv6_recvmsg.c @@ -406,6 +406,13 @@ ssize_t icmpv6_recvmsg(FAR struct socket *psock, FAR struct msghdr *msg, (FAR struct sockaddr_in6 *)from, fromlen); } + /* Handle non-blocking ICMP sockets */ + + if (_SS_ISNONBLOCK(psock->s_flags) || (flags & MSG_DONTWAIT) != 0) + { + return -EAGAIN; + } + /* Initialize the state structure */ memset(&state, 0, sizeof(struct icmpv6_recvfrom_s)); diff --git a/net/icmpv6/icmpv6_sockif.c b/net/icmpv6/icmpv6_sockif.c index 8593f402342..a0a54566730 100644 --- a/net/icmpv6/icmpv6_sockif.c +++ b/net/icmpv6/icmpv6_sockif.c @@ -161,7 +161,7 @@ static int icmpv6_setup(FAR struct socket *psock, int protocol) static sockcaps_t icmpv6_sockcaps(FAR struct socket *psock) { - return 0; + return SOCKCAP_NONBLOCKING; } /****************************************************************************