提交 8f95b78d 编写于 作者: Lawlieta's avatar Lawlieta

[net][at] fix at select receive event change issue.

上级 0aa4b72b
...@@ -513,6 +513,7 @@ static void at_closed_notice_cb(int socket, at_socket_evt_t event, const char *b ...@@ -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; sock->state = AT_SOCKET_CLOSED;
rt_sem_release(sock->recv_notice); rt_sem_release(sock->recv_notice);
} }
int at_connect(int socket, const struct sockaddr *name, socklen_t namelen) int at_connect(int socket, const struct sockaddr *name, socklen_t namelen)
{ {
struct at_socket *sock; struct at_socket *sock;
...@@ -611,7 +612,13 @@ int at_recvfrom(int socket, void *mem, size_t len, int flags, struct sockaddr *f ...@@ -611,7 +612,13 @@ int at_recvfrom(int socket, void *mem, size_t len, int flags, struct sockaddr *f
sock->state = AT_SOCKET_CONNECT; 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); LOG_E("received data error, current socket (%d) state (%d) is error.", socket, sock->state);
result = -1; result = -1;
...@@ -664,7 +671,7 @@ int at_recvfrom(int socket, void *mem, size_t len, int flags, struct sockaddr *f ...@@ -664,7 +671,7 @@ int at_recvfrom(int socket, void *mem, size_t len, int flags, struct sockaddr *f
else else
{ {
LOG_D("received data exit, current socket (%d) is closed by remote.", socket); LOG_D("received data exit, current socket (%d) is closed by remote.", socket);
result = -1; result = 0;
goto __exit; goto __exit;
} }
} }
...@@ -672,18 +679,20 @@ int at_recvfrom(int socket, void *mem, size_t len, int flags, struct sockaddr *f ...@@ -672,18 +679,20 @@ int at_recvfrom(int socket, void *mem, size_t len, int flags, struct sockaddr *f
__exit: __exit:
if (result < 0) if (recv_len > 0)
{
at_do_event_changes(sock, AT_EVENT_ERROR, RT_TRUE);
}
else
{ {
result = recv_len; 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; return result;
} }
......
...@@ -32,8 +32,8 @@ ...@@ -32,8 +32,8 @@
extern "C" { extern "C" {
#endif #endif
#define AT_SW_VERSION "1.0.1" #define AT_SW_VERSION "1.0.2"
#define AT_SW_VERSION_NUM 0x10000 #define AT_SW_VERSION_NUM 0x10002
#define DBG_ENABLE #define DBG_ENABLE
#define DBG_SECTION_NAME "AT" #define DBG_SECTION_NAME "AT"
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册