@@ -878,6 +878,19 @@ STATIC mp_obj_t lwip_socket_setsockopt(mp_uint_t n_args, const mp_obj_t *args) {
878878}
879879STATIC MP_DEFINE_CONST_FUN_OBJ_VAR_BETWEEN (lwip_socket_setsockopt_obj , 4 , 4 , lwip_socket_setsockopt );
880880
881+ STATIC mp_uint_t lwip_socket_read (mp_obj_t self_in , void * buf , mp_uint_t size , int * errcode ) {
882+ lwip_socket_obj_t * socket = self_in ;
883+
884+ switch (socket -> type ) {
885+ case MOD_NETWORK_SOCK_STREAM :
886+ return lwip_tcp_receive (socket , buf , size , errcode );
887+ case MOD_NETWORK_SOCK_DGRAM :
888+ return lwip_udp_receive (socket , buf , size , NULL , NULL , errcode );
889+ }
890+ // Unreachable
891+ return MP_STREAM_ERROR ;
892+ }
893+
881894STATIC const mp_map_elem_t lwip_socket_locals_dict_table [] = {
882895 { MP_OBJ_NEW_QSTR (MP_QSTR___del__ ), (mp_obj_t )& lwip_socket_close_obj },
883896 { MP_OBJ_NEW_QSTR (MP_QSTR_close ), (mp_obj_t )& lwip_socket_close_obj },
@@ -894,11 +907,17 @@ STATIC const mp_map_elem_t lwip_socket_locals_dict_table[] = {
894907};
895908STATIC MP_DEFINE_CONST_DICT (lwip_socket_locals_dict , lwip_socket_locals_dict_table );
896909
910+ STATIC const mp_stream_p_t lwip_socket_stream_p = {
911+ .read = lwip_socket_read ,
912+ //.write = lwip_socket_write,
913+ };
914+
897915STATIC const mp_obj_type_t lwip_socket_type = {
898916 { & mp_type_type },
899917 .name = MP_QSTR_socket ,
900918 .print = lwip_socket_print ,
901919 .make_new = lwip_socket_make_new ,
920+ .stream_p = & lwip_socket_stream_p ,
902921 .locals_dict = (mp_obj_t )& lwip_socket_locals_dict ,
903922};
904923
0 commit comments