@@ -421,6 +421,20 @@ STATIC mp_obj_t mod_socket_inet_pton(mp_obj_t family_in, mp_obj_t addr_in) {
421421}
422422STATIC MP_DEFINE_CONST_FUN_OBJ_2 (mod_socket_inet_pton_obj , mod_socket_inet_pton );
423423
424+ STATIC mp_obj_t mod_socket_inet_ntop (mp_obj_t family_in , mp_obj_t binaddr_in ) {
425+ int family = mp_obj_get_int (family_in );
426+ mp_buffer_info_t bufinfo ;
427+ mp_get_buffer_raise (binaddr_in , & bufinfo , MP_BUFFER_READ );
428+ vstr_t vstr ;
429+ vstr_init_len (& vstr , family == AF_INET ? INET_ADDRSTRLEN : INET6_ADDRSTRLEN );
430+ if (inet_ntop (family , bufinfo .buf , vstr .buf , vstr .len ) == NULL ) {
431+ nlr_raise (mp_obj_new_exception_arg1 (& mp_type_OSError , MP_OBJ_NEW_SMALL_INT (errno )));
432+ }
433+ vstr .len = strlen (vstr .buf );
434+ return mp_obj_new_str_from_vstr (& mp_type_str , & vstr );
435+ }
436+ STATIC MP_DEFINE_CONST_FUN_OBJ_2 (mod_socket_inet_ntop_obj , mod_socket_inet_ntop );
437+
424438STATIC mp_obj_t mod_socket_getaddrinfo (size_t n_args , const mp_obj_t * args ) {
425439 // TODO: Implement all args
426440 assert (n_args >= 2 && n_args <= 4 );
@@ -522,6 +536,7 @@ STATIC const mp_rom_map_elem_t mp_module_socket_globals_table[] = {
522536 { MP_ROM_QSTR (MP_QSTR_socket ), MP_ROM_PTR (& usocket_type ) },
523537 { MP_ROM_QSTR (MP_QSTR_getaddrinfo ), MP_ROM_PTR (& mod_socket_getaddrinfo_obj ) },
524538 { MP_ROM_QSTR (MP_QSTR_inet_pton ), MP_ROM_PTR (& mod_socket_inet_pton_obj ) },
539+ { MP_ROM_QSTR (MP_QSTR_inet_ntop ), MP_ROM_PTR (& mod_socket_inet_ntop_obj ) },
525540 { MP_ROM_QSTR (MP_QSTR_sockaddr ), MP_ROM_PTR (& mod_socket_sockaddr_obj ) },
526541#if MICROPY_SOCKET_EXTRA
527542 { MP_ROM_QSTR (MP_QSTR_htons ), MP_ROM_PTR (& mod_socket_htons_obj ) },
0 commit comments