@@ -650,30 +650,47 @@ STATIC mp_obj_t mod_usocket_getaddrinfo(mp_obj_t host_in, mp_obj_t port_in) {
650650 mp_uint_t hlen ;
651651 const char * host = mp_obj_str_get_data (host_in , & hlen );
652652 mp_int_t port = mp_obj_get_int (port_in );
653+ bool is_inf_down = false;
653654
654655 // find a nic that can do a name lookup
655656 for (mp_uint_t i = 0 ; i < MP_STATE_PORT (mod_network_nic_list ).len ; i ++ ) {
656657 mp_obj_t nic = MP_STATE_PORT (mod_network_nic_list ).items [i ];
657658 mod_network_nic_type_t * nic_type = (mod_network_nic_type_t * )mp_obj_get_type (nic );
658- if (nic_type -> n_gethostbyname != NULL ) {
659- // ipv4 only
660- uint8_t out_ip [MOD_NETWORK_IPV4ADDR_BUF_SIZE ];
661- int32_t result = nic_type -> n_gethostbyname (host , hlen , out_ip , AF_INET );
662- if (result < 0 ) {
663- // negate result as it contains the error code which must be positive
664- nlr_raise (mp_obj_new_exception_arg1 (& mp_type_OSError , MP_OBJ_NEW_SMALL_INT (- result )));
665- }
666- mp_obj_tuple_t * tuple = mp_obj_new_tuple (5 , NULL );
667- tuple -> items [0 ] = MP_OBJ_NEW_SMALL_INT (AF_INET );
668- tuple -> items [1 ] = MP_OBJ_NEW_SMALL_INT (SOCK_STREAM );
669- tuple -> items [2 ] = MP_OBJ_NEW_SMALL_INT (0 );
670- tuple -> items [3 ] = MP_OBJ_NEW_QSTR (MP_QSTR_ );
671- tuple -> items [4 ] = netutils_format_inet_addr (out_ip , port , NETUTILS_BIG );
672- return mp_obj_new_list (1 , (mp_obj_t * )& tuple );
659+ if (nic_type -> n_gethostbyname != NULL && nic_type -> inf_up != NULL )
660+ {
661+ if (nic_type -> inf_up ()) {
662+
663+ is_inf_down = false;
664+ // ipv4 only
665+ uint8_t out_ip [MOD_NETWORK_IPV4ADDR_BUF_SIZE ];
666+ int32_t result = nic_type -> n_gethostbyname (host , hlen , out_ip , AF_INET );
667+ if (result < 0 ) {
668+ // negate result as it contains the error code which must be positive
669+ nlr_raise (mp_obj_new_exception_arg1 (& mp_type_OSError , MP_OBJ_NEW_SMALL_INT (- result )));
670+ }
671+ mp_obj_tuple_t * tuple = mp_obj_new_tuple (5 , NULL );
672+ tuple -> items [0 ] = MP_OBJ_NEW_SMALL_INT (AF_INET );
673+ tuple -> items [1 ] = MP_OBJ_NEW_SMALL_INT (SOCK_STREAM );
674+ tuple -> items [2 ] = MP_OBJ_NEW_SMALL_INT (0 );
675+ tuple -> items [3 ] = MP_OBJ_NEW_QSTR (MP_QSTR_ );
676+ tuple -> items [4 ] = netutils_format_inet_addr (out_ip , port , NETUTILS_BIG );
677+ return mp_obj_new_list (1 , (mp_obj_t * )& tuple );
678+ }
679+ else
680+ {
681+ is_inf_down = true;
682+ continue ;
683+ }
673684 }
674685 }
675-
676- nlr_raise (mp_obj_new_exception_msg (& mp_type_OSError , "no available NIC" ));
686+ if (is_inf_down )
687+ {
688+ nlr_raise (mp_obj_new_exception_msg (& mp_type_OSError , "Avialable Interfaces are down" ));
689+ }
690+ else
691+ {
692+ nlr_raise (mp_obj_new_exception_msg (& mp_type_OSError , "no available NIC" ));
693+ }
677694}
678695STATIC MP_DEFINE_CONST_FUN_OBJ_2 (mod_usocket_getaddrinfo_obj , mod_usocket_getaddrinfo );
679696
0 commit comments