diff --git a/connectivity/netsocket/include/netsocket/DTLSSocketWrapper.h b/connectivity/netsocket/include/netsocket/DTLSSocketWrapper.h index 5f7ff00e0a4..17e2a6349a7 100644 --- a/connectivity/netsocket/include/netsocket/DTLSSocketWrapper.h +++ b/connectivity/netsocket/include/netsocket/DTLSSocketWrapper.h @@ -40,6 +40,14 @@ class DTLSSocketWrapper : public TLSSocketWrapper { * @param control Transport control mode. See @ref control_transport. */ DTLSSocketWrapper(Socket *transport, const char *hostname = NULL, control_transport control = TRANSPORT_CONNECT_AND_CLOSE); + + /** Destroy a socket wrapper. + * + * Closes socket wrapper if the socket wrapper is still opened. + */ + ~DTLSSocketWrapper(); + + nsapi_error_t close() override; private: static void timing_set_delay(void *ctx, uint32_t int_ms, uint32_t fin_ms); static int timing_get_delay(void *ctx); diff --git a/connectivity/netsocket/source/DTLSSocketWrapper.cpp b/connectivity/netsocket/source/DTLSSocketWrapper.cpp index 2f8666def02..ca7544b0cb2 100644 --- a/connectivity/netsocket/source/DTLSSocketWrapper.cpp +++ b/connectivity/netsocket/source/DTLSSocketWrapper.cpp @@ -36,6 +36,11 @@ DTLSSocketWrapper::DTLSSocketWrapper(Socket *transport, const char *hostname, co #endif /* !defined(MBEDTLS_SSL_CONF_SET_TIMER) && !defined(MBEDTLS_SSL_CONF_GET_TIMER) */ } +DTLSSocketWrapper::~DTLSSocketWrapper() +{ + close(); +} + void DTLSSocketWrapper::timing_set_delay(void *ctx, uint32_t int_ms, uint32_t fin_ms) { DTLSSocketWrapper *context = static_cast(ctx); @@ -74,6 +79,16 @@ int DTLSSocketWrapper::timing_get_delay(void *ctx) } } +nsapi_error_t DTLSSocketWrapper::close() +{ + if (_timer_event_id != 0) { + mbed::mbed_event_queue()->cancel(_timer_event_id); + _timer_event_id = 0; + } + + return TLSSocketWrapper::close(); +} + void DTLSSocketWrapper::timer_event(void) { _timer_expired = true;