summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authoryangpeng <[email protected]>2024-11-06 10:26:50 +0800
committerMeco Man <[email protected]>2024-11-05 22:36:33 -0500
commitf98f772a8436efc0ea3930030d0737df3ec51d70 (patch)
tree29cedc5fb829dac57168a743e3ac5f169e70ad8f
parentfc765e2f3271000fb06de95cae14026fc8a8f890 (diff)
[components/net/at]修复大数据量传输socket断开后可能丢数据的问题
-rw-r--r--components/net/at/at_socket/at_socket.c14
1 files changed, 7 insertions, 7 deletions
diff --git a/components/net/at/at_socket/at_socket.c b/components/net/at/at_socket/at_socket.c
index 2973120205..4c5dee2b62 100644
--- a/components/net/at/at_socket/at_socket.c
+++ b/components/net/at/at_socket/at_socket.c
@@ -1065,13 +1065,6 @@ int at_recvfrom(int socket, void *mem, size_t len, int flags, struct sockaddr *f
while (1)
{
- if (sock->state == AT_SOCKET_CLOSED)
- {
- /* socket passively closed, receive function return 0 */
- result = 0;
- goto __exit;
- }
-
/* receive packet list last transmission of remaining data */
rt_mutex_take(sock->recv_lock, RT_WAITING_FOREVER);
recv_len = at_recvpkt_get(&(sock->recvpkt_list), (char *)mem, len);
@@ -1086,6 +1079,13 @@ int at_recvfrom(int socket, void *mem, size_t len, int flags, struct sockaddr *f
goto __exit;
}
+ if (sock->state == AT_SOCKET_CLOSED)
+ {
+ /* socket passively closed, receive function return 0 */
+ result = 0;
+ goto __exit;
+ }
+
if (flags & MSG_DONTWAIT)
{
rt_set_errno(EAGAIN);