Browse Source

【完善】:修改 usocket 模块的 getaddrinfo 函数使其行为和esp32的移植一致

SummerGift 7 năm trước cách đây
mục cha
commit
05c0c39ac7
1 tập tin đã thay đổi với 26 bổ sung33 xóa
  1. 26 33
      port/modusocket.c

+ 26 - 33
port/modusocket.c

@@ -471,44 +471,37 @@ STATIC const mp_obj_type_t socket_type = {
 // usocket module
 // function usocket.getaddrinfo(host, port)
 STATIC mp_obj_t mod_usocket_getaddrinfo(uint n_args, const mp_obj_t *arg) {
-    if (n_args == 3) {
-        rt_kprintf("Usage: usocket.getaddrinfo(\"host\",port,x,x). n_args must be 2 or 4.\n");
-        rt_kprintf("argument num/types mismatch\n");
-        mp_raise_OSError(MP_EAGAIN);
-        return mp_const_none;
-    } else if (n_args == 2 || n_args == 4) {
-        size_t hlen;
-        int ret;
-        const char *host = mp_obj_str_get_data(arg[0], &hlen);
-        mp_int_t port = mp_obj_get_int(arg[1]);
-        struct addrinfo hint, *res = NULL;
-        memset(&hint, 0, sizeof(hint));
-
-        ret = getaddrinfo(host, NULL, &hint, &res);
-        if (ret != 0) {
-            rt_kprintf("getaddrinfo err: %d '%s'\n", ret, host);
-            nlr_raise(mp_obj_new_exception_msg(&mp_type_OSError, "no available netif"));
-        }
+    // TODO support additional args beyond the first two
+    size_t hlen;
+    int ret;
+    const char *host = mp_obj_str_get_data(arg[0], &hlen);
+    mp_int_t port = mp_obj_get_int(arg[1]);
+    struct addrinfo hint, *res = NULL;
+    memset(&hint, 0, sizeof(hint));
+
+    ret = getaddrinfo(host, NULL, &hint, &res);
+    if (ret != 0) {
+        rt_kprintf("getaddrinfo err: %d '%s'\n", ret, host);
+        nlr_raise(mp_obj_new_exception_msg(&mp_type_OSError, "no available netif"));
+    }
 
-        mp_obj_tuple_t *tuple = mp_obj_new_tuple(5, NULL);
-        tuple->items[0] = MP_OBJ_NEW_SMALL_INT(MOD_NETWORK_AF_INET);
-        tuple->items[1] = MP_OBJ_NEW_SMALL_INT(MOD_NETWORK_SOCK_STREAM);
-        tuple->items[2] = MP_OBJ_NEW_SMALL_INT(0);
-        tuple->items[3] = MP_OBJ_NEW_QSTR(MP_QSTR_);
+    mp_obj_tuple_t *tuple = mp_obj_new_tuple(5, NULL);
+    tuple->items[0] = MP_OBJ_NEW_SMALL_INT(MOD_NETWORK_AF_INET);
+    tuple->items[1] = MP_OBJ_NEW_SMALL_INT(MOD_NETWORK_SOCK_STREAM);
+    tuple->items[2] = MP_OBJ_NEW_SMALL_INT(0);
+    tuple->items[3] = MP_OBJ_NEW_QSTR(MP_QSTR_);
 
-        mp_obj_t tuple_addr[2] = { 
-            tuple_addr[0] = netutils_format_ipv4_addr(((res->ai_addr->sa_data) + 2),NETUTILS_BIG), 
-            tuple_addr[1] = mp_obj_new_int(port), 
-        };
+    mp_obj_t tuple_addr[2] = {
+            tuple_addr[0] = netutils_format_ipv4_addr(((res->ai_addr->sa_data) + 2), NETUTILS_BIG),
+            tuple_addr[1] = mp_obj_new_int(port),
+    };
 
-        tuple->items[4] = mp_obj_new_tuple(2, tuple_addr);
-        freeaddrinfo(res);
+    tuple->items[4] = mp_obj_new_tuple(2, tuple_addr);
+    freeaddrinfo(res);
 
-        return mp_obj_new_list(1, (mp_obj_t*) &tuple);
-    }
+    return mp_obj_new_list(1, (mp_obj_t*) &tuple);
 }
-STATIC MP_DEFINE_CONST_FUN_OBJ_VAR_BETWEEN(mod_usocket_getaddrinfo_obj, 2, 4, mod_usocket_getaddrinfo);
-
+STATIC MP_DEFINE_CONST_FUN_OBJ_VAR_BETWEEN(mod_usocket_getaddrinfo_obj, 2, 6, mod_usocket_getaddrinfo);
 
 STATIC const mp_rom_map_elem_t mp_module_usocket_globals_table[] = {
     { MP_ROM_QSTR(MP_QSTR___name__), MP_ROM_QSTR(MP_QSTR_usocket) },