diff --git a/extmod/modlwip.c b/extmod/modlwip.c
index 1ebcd8923c088ff45ddd5ac4778914dcc8f31b1a..441fd8cec9d3e83b241cbb9a7717a65952a08d37 100644
--- a/extmod/modlwip.c
+++ b/extmod/modlwip.c
@@ -451,6 +451,9 @@ STATIC mp_uint_t lwip_tcp_receive(lwip_socket_obj_t *socket, byte *buf, mp_uint_
 
         // Non-blocking socket
         if (socket->timeout == 0) {
+            if (socket->state == STATE_PEER_CLOSED) {
+                return 0;
+            }
             *_errno = EAGAIN;
             return -1;
         }