summaryrefslogtreecommitdiffstatshomepage
path: root/extmod/modssl_mbedtls.c
diff options
context:
space:
mode:
Diffstat (limited to 'extmod/modssl_mbedtls.c')
-rw-r--r--extmod/modssl_mbedtls.c13
1 files changed, 9 insertions, 4 deletions
diff --git a/extmod/modssl_mbedtls.c b/extmod/modssl_mbedtls.c
index 8974ff65dd..b02b77b76f 100644
--- a/extmod/modssl_mbedtls.c
+++ b/extmod/modssl_mbedtls.c
@@ -486,15 +486,20 @@ STATIC mp_uint_t socket_ioctl(mp_obj_t o_in, mp_uint_t request, uintptr_t arg, i
mp_uint_t ret = 0;
uintptr_t saved_arg = 0;
mp_obj_t sock = self->sock;
- if (sock == MP_OBJ_NULL || (request != MP_STREAM_CLOSE && self->last_error != 0)) {
- // Closed or error socket:
- return MP_STREAM_POLL_NVAL;
- }
if (request == MP_STREAM_CLOSE) {
+ if (sock == MP_OBJ_NULL) {
+ // Already closed socket, do nothing.
+ return 0;
+ }
self->sock = MP_OBJ_NULL;
mbedtls_ssl_free(&self->ssl);
} else if (request == MP_STREAM_POLL) {
+ if (sock == MP_OBJ_NULL || self->last_error != 0) {
+ // Closed or error socket, return NVAL flag.
+ return MP_STREAM_POLL_NVAL;
+ }
+
// If the library signaled us that it needs reading or writing, only check that direction,
// but save what the caller asked because we need to restore it later
if (self->poll_mask && (arg & MP_STREAM_POLL_RDWR)) {