diff --git a/components/net/at/at_socket/at_socket.c b/components/net/at/at_socket/at_socket.c index 4695d3c102c..58680e2b345 100644 --- a/components/net/at/at_socket/at_socket.c +++ b/components/net/at/at_socket/at_socket.c @@ -751,7 +751,15 @@ static void at_connect_notice_cb(struct at_socket *sock, at_socket_evt_t event, char *socket_info = RT_NULL; int base_socket = 0; + rt_sscanf(buff, "SOCKET:%d", &base_socket); + LOG_D("ACCEPT BASE SOCKET: %d", base_socket); /* avoid use bottom driver to alloc "socket" */ + new_sock = at_get_base_socket(base_socket); + if (new_sock) + { + new_sock->state = AT_SOCKET_CONNECT; + return; + } new_socket = at_socket(AF_AT, SOCK_STREAM, 0); if (new_socket == -1) { @@ -759,8 +767,6 @@ static void at_connect_notice_cb(struct at_socket *sock, at_socket_evt_t event, } new_sock = at_get_socket(new_socket); new_sock->state = AT_SOCKET_CONNECT; - rt_sscanf(buff, "SOCKET:%d", &base_socket); - LOG_D("ACCEPT BASE SOCKET: %d", base_socket); new_sock->user_data = (void *)base_socket; /* find out the listen socket */ @@ -995,6 +1001,7 @@ int at_accept(int socket, struct sockaddr *name, socklen_t *namelen) if (result < 0) { at_do_event_changes(sock, AT_EVENT_ERROR, RT_TRUE); + return result; } return new_sock->socket;