diff --git a/components/esp-tls/esp_tls.c b/components/esp-tls/esp_tls.c index 7e6bc81142..d28a06c872 100644 --- a/components/esp-tls/esp_tls.c +++ b/components/esp-tls/esp_tls.c @@ -96,15 +96,23 @@ static ssize_t tcp_write(esp_tls_t *tls, const char *data, size_t datalen) * @brief Close the TLS connection and free any allocated resources. */ void esp_tls_conn_delete(esp_tls_t *tls) +{ + esp_tls_conn_destroy(tls); +} + +int esp_tls_conn_destroy(esp_tls_t *tls) { if (tls != NULL) { + int ret = 0; _esp_tls_conn_delete(tls); if (tls->sockfd >= 0) { - close(tls->sockfd); + ret = close(tls->sockfd); } - free(tls->error_handle); - free(tls); + free(tls->error_handle); + free(tls); + return ret; } + return -1; // invalid argument } esp_tls_t *esp_tls_init(void) diff --git a/components/esp-tls/esp_tls.h b/components/esp-tls/esp_tls.h index 5d982d3dcc..f2f641b95c 100644 --- a/components/esp-tls/esp_tls.h +++ b/components/esp-tls/esp_tls.h @@ -463,6 +463,15 @@ static inline ssize_t esp_tls_conn_read(esp_tls_t *tls, void *data, size_t data return tls->read(tls, (char *)data, datalen); } +/** + * @brief Compatible version of esp_tls_conn_destroy() to close the TLS/SSL connection + * + * @note This API will be removed in IDFv5.0 + * + * @param[in] tls pointer to esp-tls as esp-tls handle. + */ +void esp_tls_conn_delete(esp_tls_t *tls); + /** * @brief Close the TLS/SSL connection and free any allocated resources. * @@ -470,8 +479,11 @@ static inline ssize_t esp_tls_conn_read(esp_tls_t *tls, void *data, size_t data * esp_tls_conn_http_new() APIs. * * @param[in] tls pointer to esp-tls as esp-tls handle. + * + * @return - 0 on success + * - -1 if socket error or an invalid argument */ -void esp_tls_conn_delete(esp_tls_t *tls); +int esp_tls_conn_destroy(esp_tls_t *tls); /** * @brief Return the number of application data bytes remaining to be diff --git a/components/tcp_transport/transport_ssl.c b/components/tcp_transport/transport_ssl.c index 23c2b09440..98bda19a0c 100644 --- a/components/tcp_transport/transport_ssl.c +++ b/components/tcp_transport/transport_ssl.c @@ -74,7 +74,7 @@ static int ssl_connect(esp_transport_handle_t t, const char *host, int port, int if (esp_tls_conn_new_sync(host, strlen(host), port, &ssl->cfg, ssl->tls) <= 0) { ESP_LOGE(TAG, "Failed to open a new connection"); esp_transport_set_errors(t, ssl->tls->error_handle); - esp_tls_conn_delete(ssl->tls); + esp_tls_conn_destroy(ssl->tls); ssl->tls = NULL; return -1; } @@ -170,7 +170,7 @@ static int ssl_close(esp_transport_handle_t t) int ret = -1; transport_ssl_t *ssl = esp_transport_get_context_data(t); if (ssl->ssl_initialized) { - esp_tls_conn_delete(ssl->tls); + ret = esp_tls_conn_destroy(ssl->tls); ssl->conn_state = TRANS_SSL_INIT; ssl->ssl_initialized = false; } diff --git a/components/tcp_transport/transport_tcp.c b/components/tcp_transport/transport_tcp.c index 6e68991a31..69137ffca6 100644 --- a/components/tcp_transport/transport_tcp.c +++ b/components/tcp_transport/transport_tcp.c @@ -83,7 +83,11 @@ static int tcp_connect(esp_transport_handle_t t, const char *host, int port, int // Set socket to non-blocking int flags; - if ((flags = fcntl(tcp->sock, F_GETFL, NULL)) < 0 || fcntl(tcp->sock, F_SETFL, flags |= O_NONBLOCK) < 0) { + if ((flags = fcntl(tcp->sock, F_GETFL, NULL)) < 0) { + ESP_LOGE(TAG, "[sock=%d] get file flags error: %s", tcp->sock, strerror(errno)); + goto error; + } + if (fcntl(tcp->sock, F_SETFL, flags |= O_NONBLOCK) < 0) { ESP_LOGE(TAG, "[sock=%d] set nonblocking error: %s", tcp->sock, strerror(errno)); goto error; } @@ -126,7 +130,11 @@ static int tcp_connect(esp_transport_handle_t t, const char *host, int port, int } } // Reset socket to blocking - if ((flags = fcntl(tcp->sock, F_GETFL, NULL)) < 0 || fcntl(tcp->sock, F_SETFL, flags & ~O_NONBLOCK) < 0) { + if ((flags = fcntl(tcp->sock, F_GETFL, NULL)) < 0) { + ESP_LOGE(TAG, "[sock=%d] get file flags error: %s", tcp->sock, strerror(errno)); + goto error; + } + if (fcntl(tcp->sock, F_SETFL, flags & ~O_NONBLOCK) < 0) { ESP_LOGE(TAG, "[sock=%d] reset blocking error: %s", tcp->sock, strerror(errno)); goto error; }