diff --git a/components/esp-tls/esp_tls.h b/components/esp-tls/esp_tls.h index 9330f9dd69..d6a22fc007 100644 --- a/components/esp-tls/esp_tls.h +++ b/components/esp-tls/esp_tls.h @@ -404,6 +404,10 @@ int esp_tls_conn_http_new_async(const char *url, const esp_tls_cfg_t *cfg, esp_t * of bytes actually written to the TLS/SSL connection. * - <0 if write operation was not successful, because either an * error occured or an action must be taken by the calling process. + * - ESP_TLS_ERR_SSL_WANT_READ/ + * ESP_TLS_ERR_SSL_WANT_WRITE. + * if the handshake is incomplete and waiting for data to be available for reading. + * In this case this functions needs to be called again when the underlying transport is ready for operation. */ static inline ssize_t esp_tls_conn_write(esp_tls_t *tls, const void *data, size_t datalen) { diff --git a/components/esp-tls/esp_tls_mbedtls.c b/components/esp-tls/esp_tls_mbedtls.c index 35064399c9..b976b85889 100644 --- a/components/esp-tls/esp_tls_mbedtls.c +++ b/components/esp-tls/esp_tls_mbedtls.c @@ -198,10 +198,10 @@ ssize_t esp_mbedtls_write(esp_tls_t *tls, const char *data, size_t datalen) mbedtls_print_error_msg(ret); return ret; } else { - // Exitting the tls-write process as less than desired datalen are writable + // Exiting the tls-write process as less than desired datalen are writable ESP_LOGD(TAG, "mbedtls_ssl_write() returned -0x%04X, already written %d, exitting...", -ret, written); mbedtls_print_error_msg(ret); - return written; + return (written > 0) ? written : ret; } } written += ret; diff --git a/components/esp-tls/esp_tls_wolfssl.c b/components/esp-tls/esp_tls_wolfssl.c index dabcd6225c..08dca316d4 100644 --- a/components/esp-tls/esp_tls_wolfssl.c +++ b/components/esp-tls/esp_tls_wolfssl.c @@ -409,7 +409,7 @@ ssize_t esp_wolfssl_read(esp_tls_t *tls, char *data, size_t datalen) ssize_t esp_wolfssl_write(esp_tls_t *tls, const char *data, size_t datalen) { ssize_t ret = wolfSSL_write( (WOLFSSL *)tls->priv_ssl, (unsigned char *) data, datalen); - if (ret < 0) { + if (ret <= 0) { int err = wolfSSL_get_error( (WOLFSSL *)tls->priv_ssl, ret); if (err != WOLFSSL_ERROR_WANT_READ && err != WOLFSSL_ERROR_WANT_WRITE) { ESP_INT_EVENT_TRACKER_CAPTURE(tls->error_handle, ESP_TLS_ERR_TYPE_WOLFSSL, -err);