@@ -379,75 +379,10 @@ STATIC mp_uint_t sock_read(mp_obj_t self_in, void *buf, mp_uint_t max_len, int *
379
379
return MP_STREAM_ERROR ;
380
380
}
381
381
382
- enum net_sock_type sock_type = net_context_get_type (socket -> ctx );
383
- unsigned recv_len ;
384
-
385
- if (sock_type == SOCK_DGRAM ) {
386
-
387
- struct net_pkt * pkt = k_fifo_get (& SOCK_FIELD (socket , recv_q ), K_FOREVER );
388
-
389
- recv_len = net_pkt_appdatalen (pkt );
390
- DEBUG_printf ("recv: pkt=%p, appdatalen: %d\n" , pkt , recv_len );
391
-
392
- if (recv_len > max_len ) {
393
- recv_len = max_len ;
394
- }
395
-
396
- net_pkt_gather (pkt , buf , recv_len );
397
- net_pkt_unref (pkt );
398
-
399
- } else if (sock_type == SOCK_STREAM ) {
400
-
401
- do {
402
-
403
- if (socket -> state == STATE_PEER_CLOSED ) {
404
- return 0 ;
405
- }
406
-
407
- _k_fifo_wait_non_empty (& SOCK_FIELD (socket , recv_q ), K_FOREVER );
408
- struct net_pkt * pkt = _k_fifo_peek_head (& SOCK_FIELD (socket , recv_q ));
409
- if (pkt == NULL ) {
410
- DEBUG_printf ("TCP recv: NULL return from fifo\n" );
411
- continue ;
412
- }
413
-
414
- DEBUG_printf ("TCP recv: cur_pkt: %p\n" , pkt );
415
-
416
- struct net_buf * frag = pkt -> frags ;
417
- if (frag == NULL ) {
418
- printf ("net_pkt has empty fragments on start!\n" );
419
- assert (0 );
420
- }
421
-
422
- unsigned frag_len = frag -> len ;
423
- recv_len = frag_len ;
424
- if (recv_len > max_len ) {
425
- recv_len = max_len ;
426
- }
427
- DEBUG_printf ("%d data bytes in head frag, going to read %d\n" , frag_len , recv_len );
428
-
429
- memcpy (buf , frag -> data , recv_len );
430
-
431
- if (recv_len != frag_len ) {
432
- net_buf_pull (frag , recv_len );
433
- } else {
434
- frag = net_pkt_frag_del (pkt , NULL , frag );
435
- if (frag == NULL ) {
436
- DEBUG_printf ("Finished processing pkt %p\n" , pkt );
437
- // Drop head packet from queue
438
- k_fifo_get (& SOCK_FIELD (socket , recv_q ), K_NO_WAIT );
439
-
440
- // If "sent" flag was set, it's last packet and we reached EOF
441
- if (net_pkt_sent (pkt )) {
442
- socket -> state = STATE_PEER_CLOSED ;
443
- }
444
- net_pkt_unref (pkt );
445
- }
446
- }
447
- // Keep repeating while we're getting empty fragments
448
- // Zephyr IP stack appears to have fed empty net_buf's with empty
449
- // frags for various TCP control packets - in previous versions.
450
- } while (recv_len == 0 );
382
+ ssize_t recv_len = zsock_recv (socket -> ctx , buf , max_len , 0 );
383
+ if (recv_len == -1 ) {
384
+ * errcode = errno ;
385
+ return MP_STREAM_ERROR ;
451
386
}
452
387
453
388
return recv_len ;
0 commit comments