@@ -171,6 +171,16 @@ mp_obj_t ip_to_tuple(byte *ip) {
171
171
return mp_obj_new_tuple (4 , _ip_tuple);
172
172
}
173
173
174
+ void tuple_to_ip (mp_obj_t tuple_in, byte *ip) {
175
+ if (mp_obj_is_exact_type (tuple_in, &mp_type_tuple)) {
176
+ mp_obj_tuple_t *tuple = MP_OBJ_TO_PTR2 (tuple_in, mp_obj_tuple_t );
177
+ ip[0 ] = mp_obj_get_int (tuple->items [0 ]);
178
+ ip[1 ] = mp_obj_get_int (tuple->items [1 ]);
179
+ ip[2 ] = mp_obj_get_int (tuple->items [2 ]);
180
+ ip[3 ] = mp_obj_get_int (tuple->items [3 ]);
181
+ }
182
+ }
183
+
174
184
int network_pint_socket_bind (mod_network_socket_obj_t *socket, byte *ip, mp_uint_t port, int *_errno) {
175
185
debug_printf (" socket_bind(%d, %d)\n " , socket->fileno , port);
176
186
@@ -307,6 +317,14 @@ mp_uint_t network_pint_socket_recvfrom(mod_network_socket_obj_t *socket, byte *b
307
317
mp_obj_t result = call_method (nic->socket_recvfrom , 4 , (mp_obj_t )socket->_private , _buf, _ip, _port);
308
318
if (result != mp_const_none) {
309
319
*_errno = 0 ;
320
+ if (mp_obj_is_exact_type (result, &mp_type_tuple)) {
321
+ // Expect length, (0, 0, 0, 0), port
322
+ mp_obj_tuple_t *tuple = MP_OBJ_TO_PTR2 (result, mp_obj_tuple_t );
323
+ tuple_to_ip (tuple->items [1 ], ip);
324
+ *port = mp_obj_get_int (tuple->items [2 ]);
325
+ return mp_obj_get_int (tuple->items [0 ]);
326
+ }
327
+ // Just a length
310
328
return mp_obj_get_int (result);
311
329
}
312
330
0 commit comments