Procházet zdrojové kódy

🐞 fix(at_socket):修复socket 在开启server下的connect连接
修复accept在错误执行过程中返回无效socket问题

蒙蒙plus před 1 měsícem
rodič
revize
6ab057be41
1 změnil soubory, kde provedl 9 přidání a 2 odebrání
  1. 9 2
      components/net/at/at_socket/at_socket.c

+ 9 - 2
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 @@ __exit:
     if (result < 0)
     {
         at_do_event_changes(sock, AT_EVENT_ERROR, RT_TRUE);
+        return result;
     }
 
     return new_sock->socket;