summaryrefslogtreecommitdiffstatshomepage
path: root/extmod/modlwip.c
diff options
context:
space:
mode:
Diffstat (limited to 'extmod/modlwip.c')
-rw-r--r--extmod/modlwip.c8
1 files changed, 7 insertions, 1 deletions
diff --git a/extmod/modlwip.c b/extmod/modlwip.c
index 1f93cde836..05b6208f2a 100644
--- a/extmod/modlwip.c
+++ b/extmod/modlwip.c
@@ -391,13 +391,19 @@ STATIC mp_uint_t lwip_tcp_receive(lwip_socket_obj_t *socket, byte *buf, mp_uint_
if (socket->incoming.pbuf == NULL) {
mp_uint_t start = mp_hal_ticks_ms();
- while (socket->incoming.pbuf == NULL) {
+ while (socket->state == STATE_CONNECTED && socket->incoming.pbuf == NULL) {
if (socket->timeout != -1 && mp_hal_ticks_ms() - start > socket->timeout) {
*_errno = ETIMEDOUT;
return -1;
}
poll_sockets();
}
+ if (socket->state == STATE_PEER_CLOSED) {
+ return 0;
+ } else if (socket->state != STATE_CONNECTED) {
+ *_errno = -socket->state;
+ return -1;
+ }
}
struct pbuf *p = socket->incoming.pbuf;