summaryrefslogtreecommitdiff
path: root/components/net
diff options
context:
space:
mode:
authorchenyong <[email protected]>2018-09-14 17:32:11 +0800
committerchenyong <[email protected]>2018-09-14 19:25:45 +0800
commit8f95b78da2ca5cc3752e0d2d9592b9e346a479f3 (patch)
tree149485a25630fc85a56817bc581a403b62fc2664 /components/net
parent0aa4b72b45bab31699c00c44871c0ee39e9cf4b3 (diff)
[net][at] fix at select receive event change issue.
Diffstat (limited to 'components/net')
-rw-r--r--components/net/at/at_socket/at_socket.c27
-rw-r--r--components/net/at/include/at.h4
2 files changed, 20 insertions, 11 deletions
diff --git a/components/net/at/at_socket/at_socket.c b/components/net/at/at_socket/at_socket.c
index 9575868116..43913498f8 100644
--- a/components/net/at/at_socket/at_socket.c
+++ b/components/net/at/at_socket/at_socket.c
@@ -513,6 +513,7 @@ static void at_closed_notice_cb(int socket, at_socket_evt_t event, const char *b
sock->state = AT_SOCKET_CLOSED;
rt_sem_release(sock->recv_notice);
}
+
int at_connect(int socket, const struct sockaddr *name, socklen_t namelen)
{
struct at_socket *sock;
@@ -611,7 +612,13 @@ int at_recvfrom(int socket, void *mem, size_t len, int flags, struct sockaddr *f
sock->state = AT_SOCKET_CONNECT;
}
- if (sock->state != AT_SOCKET_CONNECT)
+ /* socket passively closed, receive function return 0 */
+ if (sock->state == AT_SOCKET_CLOSED)
+ {
+ result = 0;
+ goto __exit;
+ }
+ else if (sock->state != AT_SOCKET_CONNECT)
{
LOG_E("received data error, current socket (%d) state (%d) is error.", socket, sock->state);
result = -1;
@@ -664,7 +671,7 @@ int at_recvfrom(int socket, void *mem, size_t len, int flags, struct sockaddr *f
else
{
LOG_D("received data exit, current socket (%d) is closed by remote.", socket);
- result = -1;
+ result = 0;
goto __exit;
}
}
@@ -672,18 +679,20 @@ int at_recvfrom(int socket, void *mem, size_t len, int flags, struct sockaddr *f
__exit:
- if (result < 0)
- {
- at_do_event_changes(sock, AT_EVENT_ERROR, RT_TRUE);
- }
- else
+ if (recv_len > 0)
{
result = recv_len;
- if (recv_len)
+ at_do_event_changes(sock, AT_EVENT_RECV, RT_FALSE);
+
+ if (!rt_slist_isempty(&sock->recvpkt_list))
{
- at_do_event_changes(sock, AT_EVENT_RECV, RT_FALSE);
+ at_do_event_changes(sock, AT_EVENT_RECV, RT_TRUE);
}
}
+ else
+ {
+ at_do_event_changes(sock, AT_EVENT_ERROR, RT_TRUE);
+ }
return result;
}
diff --git a/components/net/at/include/at.h b/components/net/at/include/at.h
index 2601562019..300be42cb2 100644
--- a/components/net/at/include/at.h
+++ b/components/net/at/include/at.h
@@ -32,8 +32,8 @@
extern "C" {
#endif
-#define AT_SW_VERSION "1.0.1"
-#define AT_SW_VERSION_NUM 0x10000
+#define AT_SW_VERSION "1.0.2"
+#define AT_SW_VERSION_NUM 0x10002
#define DBG_ENABLE
#define DBG_SECTION_NAME "AT"