@@ -379,75 +379,10 @@ STATIC mp_uint_t sock_read(mp_obj_t self_in, void *buf, mp_uint_t max_len, int *
379379 return MP_STREAM_ERROR ;
380380 }
381381
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 ;
451386 }
452387
453388 return recv_len ;
0 commit comments