diff options
author | Paul Sokolovsky <pfalcon@users.sourceforge.net> | 2016-04-17 02:22:26 +0300 |
---|---|---|
committer | Paul Sokolovsky <pfalcon@users.sourceforge.net> | 2016-04-17 02:22:26 +0300 |
commit | 8007f84cca67a34056d1b83f283428e622e18064 (patch) | |
tree | 0f8aa7d228a3fbaf85e682e3b6748acb493bb1e1 /extmod/modlwip.c | |
parent | b830f4c61089996bde73400ebbcefe88cb7a67f1 (diff) |
extmod/modlwip: lwip_tcp_receive(): Full error handling.
Diffstat (limited to 'extmod/modlwip.c')
-rw-r--r-- | extmod/modlwip.c | 6 |
1 files changed, 6 insertions, 0 deletions
diff --git a/extmod/modlwip.c b/extmod/modlwip.c index e4abe23ed..d007b4273 100644 --- a/extmod/modlwip.c +++ b/extmod/modlwip.c @@ -465,6 +465,9 @@ STATIC mp_uint_t lwip_tcp_send(lwip_socket_obj_t *socket, const byte *buf, mp_ui // Helper function for recv/recvfrom to handle TCP packets STATIC mp_uint_t lwip_tcp_receive(lwip_socket_obj_t *socket, byte *buf, mp_uint_t len, int *_errno) { + // Check for any pending errors + STREAM_ERROR_CHECK(socket); + if (socket->incoming.pbuf == NULL) { // Non-blocking socket @@ -484,6 +487,7 @@ STATIC mp_uint_t lwip_tcp_receive(lwip_socket_obj_t *socket, byte *buf, mp_uint_ } poll_sockets(); } + if (socket->state == STATE_PEER_CLOSED) { if (socket->incoming.pbuf == NULL) { // socket closed and no data left in buffer @@ -496,6 +500,8 @@ STATIC mp_uint_t lwip_tcp_receive(lwip_socket_obj_t *socket, byte *buf, mp_uint_ } } + assert(socket->pcb.tcp != NULL); + struct pbuf *p = socket->incoming.pbuf; if (socket->leftover_count == 0) { |