kopia lustrzana https://github.com/micropython/micropython
extmod/modssl_mbedtls: Fix ioctl of a socket in closed/error state.
Signed-off-by: Damien George <damien@micropython.org>pull/12195/head
rodzic
20d3a6b196
commit
d529c20674
|
@ -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;
|
mp_uint_t ret = 0;
|
||||||
uintptr_t saved_arg = 0;
|
uintptr_t saved_arg = 0;
|
||||||
mp_obj_t sock = self->sock;
|
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 (request == MP_STREAM_CLOSE) {
|
||||||
|
if (sock == MP_OBJ_NULL) {
|
||||||
|
// Already closed socket, do nothing.
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
self->sock = MP_OBJ_NULL;
|
self->sock = MP_OBJ_NULL;
|
||||||
mbedtls_ssl_free(&self->ssl);
|
mbedtls_ssl_free(&self->ssl);
|
||||||
} else if (request == MP_STREAM_POLL) {
|
} 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,
|
// 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
|
// but save what the caller asked because we need to restore it later
|
||||||
if (self->poll_mask && (arg & MP_STREAM_POLL_RDWR)) {
|
if (self->poll_mask && (arg & MP_STREAM_POLL_RDWR)) {
|
||||||
|
|
|
@ -3,4 +3,4 @@
|
||||||
10 OSError
|
10 OSError
|
||||||
4 0
|
4 0
|
||||||
3 32
|
3 32
|
||||||
4 32
|
4 0
|
||||||
|
|
Ładowanie…
Reference in New Issue