8000 zephyr/modusocket: recv: Switch to native sockets. · lable/micropython@cb7ecda · GitHub
[go: up one dir, main page]

Skip to content

Commit cb7ecda

Browse files
committed
zephyr/modusocket: recv: Switch to native sockets.
1 parent 675ceb2 commit cb7ecda

File tree

1 file changed

+4
-69
lines changed

1 file changed

+4
-69
lines changed

zephyr/modusocket.c

Lines changed: 4 additions & 69 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)
0