diff --git a/extmod/modlwip.c b/extmod/modlwip.c
index e0bf17db8c4e2894875e6d213353453c75ec0bb7..06ed764b53cdf417c807a1cd1264ecd700e2cac4 100644
--- a/extmod/modlwip.c
+++ b/extmod/modlwip.c
@@ -1416,6 +1416,9 @@ STATIC mp_uint_t lwip_socket_ioctl(mp_obj_t self_in, mp_uint_t request, uintptr_
         tcp_err(socket->pcb.tcp, NULL);
         tcp_recv(socket->pcb.tcp, NULL);
 
+        // Free any incoming buffers or connections that are stored
+        lwip_socket_free_incoming(socket);
+
         switch (socket->type) {
             case MOD_NETWORK_SOCK_STREAM: {
                 if (tcp_close(socket->pcb.tcp) != ERR_OK) {
@@ -1430,7 +1433,7 @@ STATIC mp_uint_t lwip_socket_ioctl(mp_obj_t self_in, mp_uint_t request, uintptr_
             case MOD_NETWORK_SOCK_DGRAM: udp_remove(socket->pcb.udp); break;
             //case MOD_NETWORK_SOCK_RAW: raw_remove(socket->pcb.raw); break;
         }
-        lwip_socket_free_incoming(socket);
+
         socket->pcb.tcp = NULL;
         socket->state = _ERR_BADF;
         ret = 0;