summaryrefslogtreecommitdiff
path: root/components/net
diff options
context:
space:
mode:
authorchenyong <[email protected]>2018-09-17 18:01:26 +0800
committerchenyong <[email protected]>2018-09-17 18:07:26 +0800
commite2706c14b11c0e86bc38df9852f8b3948061aad0 (patch)
tree316af03c1c05ce5302ed182ea11e5e4beb520ad9 /components/net
parent3fce70d804e25d0a6fc1b3b50a59f2d76c595b72 (diff)
[net][at] Fix AT Socket select send data issue.
Diffstat (limited to 'components/net')
-rw-r--r--components/net/at/at_socket/at_socket.c34
1 files changed, 32 insertions, 2 deletions
diff --git a/components/net/at/at_socket/at_socket.c b/components/net/at/at_socket/at_socket.c
index 43913498f8..6f12c1d22a 100644
--- a/components/net/at/at_socket/at_socket.c
+++ b/components/net/at/at_socket/at_socket.c
@@ -200,7 +200,7 @@ static void at_do_event_changes(struct at_socket *sock, at_event_t event, rt_boo
{
if (is_plus)
{
- sock->sendevent++;
+ sock->sendevent = 1;
#ifdef SAL_USING_POSIX
rt_wqueue_wakeup(&sock->wait_head, (void*) POLLOUT);
@@ -209,7 +209,7 @@ static void at_do_event_changes(struct at_socket *sock, at_event_t event, rt_boo
}
else if (sock->sendevent)
{
- sock->sendevent --;
+ sock->sendevent = 0;
}
break;
}
@@ -252,6 +252,30 @@ static void at_do_event_changes(struct at_socket *sock, at_event_t event, rt_boo
}
}
+static void at_do_event_clean(struct at_socket *sock, at_event_t event)
+{
+ switch (event)
+ {
+ case AT_EVENT_SEND:
+ {
+ sock->sendevent = 0;
+ break;
+ }
+ case AT_EVENT_RECV:
+ {
+ sock->rcvevent = 0;
+ break;
+ }
+ case AT_EVENT_ERROR:
+ {
+ sock->errevent = 0;
+ break;
+ }
+ default:
+ LOG_E("Not supported event (%d)", event);
+ }
+}
+
static struct at_socket *alloc_socket(void)
{
static rt_mutex_t at_slock = RT_NULL;
@@ -565,6 +589,8 @@ __exit:
at_do_event_changes(sock, AT_EVENT_ERROR, RT_TRUE);
}
+ at_do_event_changes(sock, AT_EVENT_SEND, RT_TRUE);
+
return result;
}
@@ -688,6 +714,10 @@ __exit:
{
at_do_event_changes(sock, AT_EVENT_RECV, RT_TRUE);
}
+ else
+ {
+ at_do_event_clean(sock, AT_EVENT_RECV);
+ }
}
else
{