mirror of
https://github.com/apache/nuttx.git
synced 2026-08-10 23:15:15 +00:00
recvmsg() will incorrectly return 0 if the count of sema before waiting is greater than 0,
This commit will reinitialize the sema count before waiting:
1181 static ssize_t rpmsg_socket_recvmsg(FAR struct socket *psock,
1182 FAR struct msghdr *msg, int flags)
1183 {
...
1255 ret = net_sem_timedwait(&conn->recvsem,
1256 _SO_TIMEOUT(conn->sconn.s_rcvtimeo)); // recvsem.sem_count == 1; return 0
...
1264 if (!conn->recvdata) // recvdata not consumed; goto else
1265 {
1266 ret = conn->recvlen;
1267 }
1268 else
1269 {
1270 conn->recvdata = NULL;
1271 }
...
1282 return ret; // BUGON! incorrectly return 0 to user
1283 }
Signed-off-by: chao an <anchao@xiaomi.com>
|
||
|---|---|---|
| .. | ||
| arp | ||
| bluetooth | ||
| can | ||
| devif | ||
| icmp | ||
| icmpv6 | ||
| ieee802154 | ||
| igmp | ||
| inet | ||
| ipforward | ||
| ipfrag | ||
| local | ||
| mld | ||
| nat | ||
| neighbor | ||
| netdev | ||
| netfilter | ||
| netlink | ||
| pkt | ||
| procfs | ||
| route | ||
| rpmsg | ||
| sixlowpan | ||
| socket | ||
| tcp | ||
| udp | ||
| usrsock | ||
| utils | ||
| Kconfig | ||
| Makefile | ||
| net_initialize.c | ||
| README.txt | ||
README
======
Directory Structure
===================
nuttx/
|
`- net/
|
+- arp - Address resolution protocol (IPv4)
+- bluetooth - PF_BLUETOOTH socket interface
+- devif - Stack/device interface layer
+- ipfrag - Fragmentation and reassembly
+- icmp - Internet Control Message Protocol (IPv4)
+- icmpv6 - Internet Control Message Protocol (IPv6)
+- ieee802154 - PF_IEEE802154 socket interface
+- inet - PF_INET/PF_INET6 socket interface
+- ipforward - IP forwarding logic
+- local - Unix domain (local) sockets
+- mld - Multicast Listener Discovery (MLD)
+- neighbor - Neighbor Discovery Protocol (IPv6)
+- netdev - Socket network device interface
+- netlink - Netlink IPC socket interface
+- pkt - "Raw" packet socket support
+- sixlowpan - 6LoWPAN implementation
+- socket - BSD socket interface
+- route - Routing table support
+- tcp - Transmission Control Protocol
+- udp - User Datagram Protocol
+- usrsock - User socket API for user-space networking stack
`- utils - Miscellaneous utility functions
+-------------------------------------------------------------------++------------------------+
| Application layer || usrsock daemon |
+-------------------------------------------------------------------++------------------------+
+-------------------------------------------------------------------++----------------+ +-----+
| Socket layer (socket/) || /dev/usrsock | | |
+-------------------------------------------------------------------++----------------+ | |
+------------++--------------------------------------------------++-------------------+ | |
| Network || Protocol stacks (arp, ipv6, icmp, pkt, tcp, udp) || usrsock/ | | |
| Device |+--------------------------------------------------++-------------------+ | |
| Interface |+------------------------------------++---------------------------------+ | |
| (netdev/) || Network Device Interface (devif/) || Utilities | | |
+------------++------------------------------------++---------------------------------+ | |
+----------------------------------------------------------------+ | |
| Network Device Drivers | | HAL |
+----------------------------------------------------------------+ +-----+
+----------------------------------------------------------------+ +--------------------------+
| Networking Hardware | | Hardware TCP/IP Stack |
+----------------------------------------------------------------+ +--------------------------+