@@ -102,6 +102,11 @@ STATIC void socket_print(const mp_print_t *print, mp_obj_t self_in, mp_print_kin
102102STATIC mp_uint_t socket_read (mp_obj_t o_in , void * buf , mp_uint_t size , int * errcode ) {
103103 mp_obj_ssl_socket_t * o = MP_OBJ_TO_PTR (o_in );
104104
105+ if (o -> ssl_sock == NULL ) {
106+ * errcode = EBADF ;
107+ return MP_STREAM_ERROR ;
108+ }
109+
105110 while (o -> bytes_left == 0 ) {
106111 mp_int_t r = ssl_read (o -> ssl_sock , & o -> buf );
107112 if (r == SSL_OK ) {
@@ -131,6 +136,12 @@ STATIC mp_uint_t socket_read(mp_obj_t o_in, void *buf, mp_uint_t size, int *errc
131136
132137STATIC mp_uint_t socket_write (mp_obj_t o_in , const void * buf , mp_uint_t size , int * errcode ) {
133138 mp_obj_ssl_socket_t * o = MP_OBJ_TO_PTR (o_in );
139+
140+ if (o -> ssl_sock == NULL ) {
141+ * errcode = EBADF ;
142+ return MP_STREAM_ERROR ;
143+ }
144+
134145 mp_int_t r = ssl_write (o -> ssl_sock , buf , size );
135146 if (r < 0 ) {
136147 * errcode = r ;
@@ -151,9 +162,14 @@ STATIC MP_DEFINE_CONST_FUN_OBJ_2(socket_setblocking_obj, socket_setblocking);
151162
152163STATIC mp_obj_t socket_close (mp_obj_t self_in ) {
153164 mp_obj_ssl_socket_t * self = MP_OBJ_TO_PTR (self_in );
154- ssl_free (self -> ssl_sock );
155- ssl_ctx_free (self -> ssl_ctx );
156- return mp_stream_close (self -> sock );
165+ if (self -> ssl_sock != NULL ) {
166+ ssl_free (self -> ssl_sock );
167+ ssl_ctx_free (self -> ssl_ctx );
168+ self -> ssl_sock = NULL ;
169+ return mp_stream_close (self -> sock );
170+ }
171+
172+ return mp_const_none ;
157173}
158174STATIC MP_DEFINE_CONST_FUN_OBJ_1 (socket_close_obj , socket_close );
159175
0 commit comments