New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Misleading esp-tls error messages (IDFGH-5162) #6940
Comments
I know that, but that is not a good excuse!
As far as I can tell, this is a bug and regression since older esp-idf does not has such issues. |
@AxelLin Yes, I agree with that. And we plan to fix unwanted side-effect you said in future version. Our colleagues is working on this. |
Tag could be renamed to "esp-tl" or "esp-tl(s)" |
It's not just about rename the tag. |
CANNOT_RESOLVE_HOSTNAME is not confusing. Either they can rename everything or they can specify that esp-tls stands for "transport layer system" not "transport layer security". Retrain our brains is easier. Tls already has alternate meaning in esp-idf too as "thread local storage". |
Hi @AxelLin As @ESP-YJM mentioned above, we're trying to address the memory issue, please find below a WIP patch which avoids tcp_transport-Use-tcp_connect-esp_tls-for-TCP.patch.txt As for the misleading error message, I'm afraid we cannot do much, as the If you break down the error code above
|
My understanding is the esp-tls was a layer for providing a common inteface using different TLS library. Revert this refactor is an option, but it's up to you. |
I'm still convinced it was a good change. The main reason was to reduce code duplication, and the maintenance effort on plain socket operations.
This is true, but the plain TCP transport was supported before and it usually is supported by default. You can also connect to a plain TCP server with
or
in case of TCP connection issues. |
I hit below error after applying this patch: |
Oh, socket exhaustion issue (if we connect manually, we have to close the socket too) diff --git a/components/tcp_transport/transport_ssl.c b/components/tcp_transport/transport_ssl.c
index f118b6bf5e2..82e89152bc6 100644
--- a/components/tcp_transport/transport_ssl.c
+++ b/components/tcp_transport/transport_ssl.c
@@ -277,6 +277,8 @@ static int ssl_close(esp_transport_handle_t t)
ret = esp_tls_conn_destroy(ssl->tls);
ssl->conn_state = TRANS_SSL_INIT;
ssl->ssl_initialized = false;
+ } else if (ssl && ssl->sockfd >= 0) {
+ close(ssl->sockfd);
}
return ret;
} Thanks for the early feedback and sorry for the inconvenience! we do have a test on socket leaks, but was too hasty in posting patches before running it. |
With above fix, now I no longer hit socket exhaustion issue. But sometimes I hit below issue using v4.4-dev-1254-g639e7ad494d9 + all the patch/fix mentioned in this thread. Guru Meditation Error: Core 0 panic'ed (LoadProhibited). Exception was unhandled. Core 0 register dump: A2 : 0x00000000 A3 : 0x00679e31 A4 : 0x00000001 A5 : 0x00002710 0x40116a69: lwip_selscan at /home/axel/esp/esp-idf/components/lwip/lwip/src/api/sockets.c:1898 Backtrace:0x401396cc:0x3ffdeea00x401a1ed7:0x3ffdeed0 0x40139e71:0x3ffdeef0 0x400deccd:0x3ffdef10 0x400dee75:0x3ffdef70 0x401a427b:0x3ffdef90 0x400deea1:0x3ffdefe0 0x401a1ed7: esp_transport_write at /home/axel/esp/esp-idf/components/tcp_transport/transport.c:206 0x40139e71: esp_http_client_write at /home/axel/esp/esp-idf/components/esp_http_client/esp_http_client.c:1324 My application calls esp_http_client_write() when this issue happen. |
I think above exception is not related to the patch discussed here. I also applied lwip-optimization-config-option-LWIP_TCPIP_CORE_LOCKING.patch.txt As I mentioned in #6919 (comment) |
Thanks for the clarification. This patch really needs some cleanup, but nothing related to the issue above. About the core-locking (have replied in the linked issue): |
In below changes:
ssl->tls is NULL, so it should be:
|
(This is probably off-topic) Then I check current implemenation in of tcp_write/ssl_write in components/tcp_transport/transport_ssl.c Similar question in esp-mqtt library: |
@AxelLin This is a good question, I think neither of the examples you gave handles the writes 100% correctly. (of course this is a bit simplified implementation, we should start a timer just before looping and exit the loop once it expires and we haven't sent all the data, but I believe a good and simple approximation)
This is strange, are you getting the error posted above? ( https://github.com/espressif/esp-idf/blob/master/components/tcp_transport/transport_ssl.c#L216-L217 As for the mqtt library, we should either check for |
Partially addresses espressif/esp-idf#6940
* Closes #7040 * Merges #7041 * Update submodule: git log --oneline 9fdf7b61385633075d5c3b84803f2dd0578d7869..f10321a53b53a146ee299cfecc320b89c0cf6611 Detailed description of the changes: * Remove unnecessary parentheses - esp-mqtt commit: espressif/esp-mqtt@db13533 - esp-mqtt MR: espressif/esp-mqtt!101 * outbox: Cleanup all items when connection closes - esp-mqtt commit: espressif/esp-mqtt@1a94efe - esp-mqtt MR: espressif/esp-mqtt!104 * Outbox: Removes unnecessary calls to outbox_set_pending - esp-mqtt commit: espressif/esp-mqtt@36a3990 - esp-mqtt MR: espressif/esp-mqtt!105 * MQTT: Makes abort connection function void. - esp-mqtt commit: espressif/esp-mqtt@67553ab - esp-mqtt MR: espressif/esp-mqtt!106 * Client: Removes unused defines - esp-mqtt commit: espressif/esp-mqtt@eec6f0e - esp-mqtt MR: espressif/esp-mqtt!100 - Closes espressif/esp-mqtt#194 * Config: Added support for certificate bundle - esp-mqtt commit: espressif/esp-mqtt@06157be - esp-mqtt MR: espressif/esp-mqtt!98 - Closes espressif/esp-mqtt#190 * Config: Adds missing field at config struct (path field) - esp-mqtt commit: espressif/esp-mqtt@5b27d18 - esp-mqtt MR: espressif/esp-mqtt!96 * Client: Add support for partial transport writes - esp-mqtt commit: espressif/esp-mqtt@d8c9c7a - esp-mqtt MR: espressif/esp-mqtt!99 - Partially addresses #6940 * Client: Add support for Retain flag in messages posted by events - esp-mqtt commit: espressif/esp-mqtt@a00a313 - esp-mqtt MR: espressif/esp-mqtt!99 - Closes espressif/esp-mqtt#193 * esp-mqtt: Added nullchecks for public APIs - esp-mqtt commit: espressif/esp-mqtt@2f57985 - esp-mqtt MR: espressif/esp-mqtt!94 - Closes espressif/esp-mqtt#185 * esp-mqtt: Reduce the includes used in all files - esp-mqtt commit: espressif/esp-mqtt@87fcce7 - esp-mqtt MR: espressif/esp-mqtt!93 * mqtt_outbox: Use STAILQ_FOREACH for outbox_delete_single_expired - esp-mqtt commit: espressif/esp-mqtt@ff8e648 - esp-mqtt MR: espressif/esp-mqtt!97 - Merges espressif/esp-mqtt#187 * Client: Add optimize for depend on ssl - esp-mqtt commit: espressif/esp-mqtt@8f3cac8 - esp-mqtt MR: espressif/esp-mqtt!95
* Closes #7040 * Merges #7041 * Update submodule: git log --oneline 9fdf7b61385633075d5c3b84803f2dd0578d7869..f10321a53b53a146ee299cfecc320b89c0cf6611 Detailed description of the changes: * Remove unnecessary parentheses - esp-mqtt commit: espressif/esp-mqtt@db13533 - esp-mqtt MR: espressif/esp-mqtt!101 * outbox: Cleanup all items when connection closes - esp-mqtt commit: espressif/esp-mqtt@1a94efe - esp-mqtt MR: espressif/esp-mqtt!104 * Outbox: Removes unnecessary calls to outbox_set_pending - esp-mqtt commit: espressif/esp-mqtt@36a3990 - esp-mqtt MR: espressif/esp-mqtt!105 * MQTT: Makes abort connection function void. - esp-mqtt commit: espressif/esp-mqtt@67553ab - esp-mqtt MR: espressif/esp-mqtt!106 * Client: Removes unused defines - esp-mqtt commit: espressif/esp-mqtt@eec6f0e - esp-mqtt MR: espressif/esp-mqtt!100 - Closes espressif/esp-mqtt#194 * Config: Added support for certificate bundle - esp-mqtt commit: espressif/esp-mqtt@06157be - esp-mqtt MR: espressif/esp-mqtt!98 - Closes espressif/esp-mqtt#190 * Config: Adds missing field at config struct (path field) - esp-mqtt commit: espressif/esp-mqtt@5b27d18 - esp-mqtt MR: espressif/esp-mqtt!96 * Client: Add support for partial transport writes - esp-mqtt commit: espressif/esp-mqtt@d8c9c7a - esp-mqtt MR: espressif/esp-mqtt!99 - Partially addresses #6940 * Client: Add support for Retain flag in messages posted by events - esp-mqtt commit: espressif/esp-mqtt@a00a313 - esp-mqtt MR: espressif/esp-mqtt!99 - Closes espressif/esp-mqtt#193 * esp-mqtt: Added nullchecks for public APIs - esp-mqtt commit: espressif/esp-mqtt@2f57985 - esp-mqtt MR: espressif/esp-mqtt!94 - Closes espressif/esp-mqtt#185 * esp-mqtt: Reduce the includes used in all files - esp-mqtt commit: espressif/esp-mqtt@87fcce7 - esp-mqtt MR: espressif/esp-mqtt!93 * mqtt_outbox: Use STAILQ_FOREACH for outbox_delete_single_expired - esp-mqtt commit: espressif/esp-mqtt@ff8e648 - esp-mqtt MR: espressif/esp-mqtt!97 - Merges espressif/esp-mqtt#187 * Client: Add optimize for depend on ssl - esp-mqtt commit: espressif/esp-mqtt@8f3cac8 - esp-mqtt MR: espressif/esp-mqtt!95
Hi. I am using eclipse with the ESP32 IDF plugin 2.3.02021111091633. I have a wifi application that has connections for a UDP, HTTP webserver, sntp server and MQTT. For testing I have the ESP32 connected to a mobile phone AP. If I switch off the AP and switch on again about every 1 in 10 goes I get the following Log:
|
@MPC-BlackBox |
@MPC-BlackBox Did you get a resolution on this? I am facing the same issue. Do you have link to the new issue ? |
@divrajBevie |
* Closes espressif/esp-idf#7040 * Merges espressif/esp-idf#7041 * Update submodule: git log --oneline 9fdf7b6..f10321a Detailed description of the changes: * Remove unnecessary parentheses - esp-mqtt commit: db13533 - esp-mqtt MR: espressif/esp-mqtt!101 * outbox: Cleanup all items when connection closes - esp-mqtt commit: 1a94efe - esp-mqtt MR: espressif/esp-mqtt!104 * Outbox: Removes unnecessary calls to outbox_set_pending - esp-mqtt commit: 36a3990 - esp-mqtt MR: espressif/esp-mqtt!105 * MQTT: Makes abort connection function void. - esp-mqtt commit: 67553ab - esp-mqtt MR: espressif/esp-mqtt!106 * Client: Removes unused defines - esp-mqtt commit: eec6f0e - esp-mqtt MR: espressif/esp-mqtt!100 - Closes #194 * Config: Added support for certificate bundle - esp-mqtt commit: 06157be - esp-mqtt MR: espressif/esp-mqtt!98 - Closes #190 * Config: Adds missing field at config struct (path field) - esp-mqtt commit: 5b27d18 - esp-mqtt MR: espressif/esp-mqtt!96 * Client: Add support for partial transport writes - esp-mqtt commit: d8c9c7a - esp-mqtt MR: espressif/esp-mqtt!99 - Partially addresses espressif/esp-idf#6940 * Client: Add support for Retain flag in messages posted by events - esp-mqtt commit: a00a313 - esp-mqtt MR: espressif/esp-mqtt!99 - Closes #193 * esp-mqtt: Added nullchecks for public APIs - esp-mqtt commit: 2f57985 - esp-mqtt MR: espressif/esp-mqtt!94 - Closes #185 * esp-mqtt: Reduce the includes used in all files - esp-mqtt commit: 87fcce7 - esp-mqtt MR: espressif/esp-mqtt!93 * mqtt_outbox: Use STAILQ_FOREACH for outbox_delete_single_expired - esp-mqtt commit: ff8e648 - esp-mqtt MR: espressif/esp-mqtt!97 - Merges #187 * Client: Add optimize for depend on ssl - esp-mqtt commit: 8f3cac8 - esp-mqtt MR: espressif/esp-mqtt!95
* Closes espressif/esp-idf#7040 * Merges espressif/esp-idf#7041 * Update submodule: git log --oneline 9fdf7b6..f10321a Detailed description of the changes: * Remove unnecessary parentheses - esp-mqtt commit: espressif@db13533 - esp-mqtt MR: espressif/esp-mqtt!101 * outbox: Cleanup all items when connection closes - esp-mqtt commit: espressif@1a94efe - esp-mqtt MR: espressif/esp-mqtt!104 * Outbox: Removes unnecessary calls to outbox_set_pending - esp-mqtt commit: espressif@36a3990 - esp-mqtt MR: espressif/esp-mqtt!105 * MQTT: Makes abort connection function void. - esp-mqtt commit: espressif@67553ab - esp-mqtt MR: espressif/esp-mqtt!106 * Client: Removes unused defines - esp-mqtt commit: espressif@eec6f0e - esp-mqtt MR: espressif/esp-mqtt!100 - Closes espressif#194 * Config: Added support for certificate bundle - esp-mqtt commit: espressif@06157be - esp-mqtt MR: espressif/esp-mqtt!98 - Closes espressif#190 * Config: Adds missing field at config struct (path field) - esp-mqtt commit: espressif@5b27d18 - esp-mqtt MR: espressif/esp-mqtt!96 * Client: Add support for partial transport writes - esp-mqtt commit: espressif@d8c9c7a - esp-mqtt MR: espressif/esp-mqtt!99 - Partially addresses espressif/esp-idf#6940 * Client: Add support for Retain flag in messages posted by events - esp-mqtt commit: espressif@a00a313 - esp-mqtt MR: espressif/esp-mqtt!99 - Closes espressif#193 * esp-mqtt: Added nullchecks for public APIs - esp-mqtt commit: espressif@2f57985 - esp-mqtt MR: espressif/esp-mqtt!94 - Closes espressif#185 * esp-mqtt: Reduce the includes used in all files - esp-mqtt commit: espressif@87fcce7 - esp-mqtt MR: espressif/esp-mqtt!93 * mqtt_outbox: Use STAILQ_FOREACH for outbox_delete_single_expired - esp-mqtt commit: espressif@ff8e648 - esp-mqtt MR: espressif/esp-mqtt!97 - Merges espressif#187 * Client: Add optimize for depend on ssl - esp-mqtt commit: espressif@8f3cac8 - esp-mqtt MR: espressif/esp-mqtt!95
* Closes espressif/esp-idf#7040 * Merges espressif/esp-idf#7041 * Update submodule: git log --oneline 9fdf7b6..f10321a Detailed description of the changes: * Remove unnecessary parentheses - esp-mqtt commit: espressif@db13533 - esp-mqtt MR: espressif/esp-mqtt!101 * outbox: Cleanup all items when connection closes - esp-mqtt commit: espressif@1a94efe - esp-mqtt MR: espressif/esp-mqtt!104 * Outbox: Removes unnecessary calls to outbox_set_pending - esp-mqtt commit: espressif@36a3990 - esp-mqtt MR: espressif/esp-mqtt!105 * MQTT: Makes abort connection function void. - esp-mqtt commit: espressif@67553ab - esp-mqtt MR: espressif/esp-mqtt!106 * Client: Removes unused defines - esp-mqtt commit: espressif@eec6f0e - esp-mqtt MR: espressif/esp-mqtt!100 - Closes espressif#194 * Config: Added support for certificate bundle - esp-mqtt commit: espressif@06157be - esp-mqtt MR: espressif/esp-mqtt!98 - Closes espressif#190 * Config: Adds missing field at config struct (path field) - esp-mqtt commit: espressif@5b27d18 - esp-mqtt MR: espressif/esp-mqtt!96 * Client: Add support for partial transport writes - esp-mqtt commit: espressif@d8c9c7a - esp-mqtt MR: espressif/esp-mqtt!99 - Partially addresses espressif/esp-idf#6940 * Client: Add support for Retain flag in messages posted by events - esp-mqtt commit: espressif@a00a313 - esp-mqtt MR: espressif/esp-mqtt!99 - Closes espressif#193 * esp-mqtt: Added nullchecks for public APIs - esp-mqtt commit: espressif@2f57985 - esp-mqtt MR: espressif/esp-mqtt!94 - Closes espressif#185 * esp-mqtt: Reduce the includes used in all files - esp-mqtt commit: espressif@87fcce7 - esp-mqtt MR: espressif/esp-mqtt!93 * mqtt_outbox: Use STAILQ_FOREACH for outbox_delete_single_expired - esp-mqtt commit: espressif@ff8e648 - esp-mqtt MR: espressif/esp-mqtt!97 - Merges espressif#187 * Client: Add optimize for depend on ssl - esp-mqtt commit: espressif@8f3cac8 - esp-mqtt MR: espressif/esp-mqtt!95
Environment
Module or chip used: ESP32-WROOM-32E
IDF version: v4.4-dev-960-gcf457d412a77
Build System: idf.py
Compiler version: xtensa-esp32-elf-gcc (crosstool-NG esp-2020r3) 8.4.0
Operating System: Linux
Power Supply: USB
Problem Description
Everytime I notice below error messages in current master tree I have to remind myself it's actually nothing to do with TLS.
E (20544) esp-tls: couldn't get hostname for :XXX.XXX.XXX: getaddrinfo() returns 202, addrinfo=0x0
E (20544) esp-tls: Failed to open new connection
E (20548) TRANSPORT_BASE: Failed to open a new connection
E (20555) MQTT_CLIENT: Error transport connect
If I check event->error_handle->esp_tls_last_esp_er (when got MQTT_EVENT_ERROR),
I got 0x8001 (ESP_ERR_ESP_TLS_CANNOT_RESOLVE_HOSTNAME)
It is a very misleading message because my setting is to connect mqtt broker port 1883 without TLS.
Any chance to fix it? (v4.3 or earier versions do not have this issue)
The text was updated successfully, but these errors were encountered: