Skip to content
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

[TW#27831] esp_mqtt reconnect error: TRANS_SSL: esp_tls_conn_read error, errno=Socket is not connected (IDFGH-2975) #2805

Closed
rustyx opened this issue Dec 7, 2018 · 3 comments

Comments

@rustyx
Copy link
Contributor

rustyx commented Dec 7, 2018

Environment

  • Development Kit: ESP32-Wrover-Kit
  • Kit version: v4
  • Module or chip used: ESP32-WROOM-32
  • IDF version: master v3.3-dev-236-gfa59b1b1c
  • Build System: Make
  • Compiler version: (crosstool-ng-1.22.0-80-g6c4433a5) 5.2.0
  • Operating System: Windows 10
  • Power Supply: USB

Problem Description

I'm trying out the new esp_mqtt library with an mqtts:// (TSL) connection.

My MQTT server is mosquitto v1.5.3.

The issue is whenever the mqtt server is restarted, the esp_mqtt task hangs with the following messages in the log:

E (56962) TRANS_SSL: esp_tls_conn_read error, errno=Bad file number
E (56967) TRANS_SSL: esp_tls_conn_read error, errno=Socket is not connected
E (56967) TRANS_SSL: esp_tls_conn_read error, errno=Socket is not connected
E (56977) TRANS_SSL: esp_tls_conn_read error, errno=Socket is not connected
E (56982) TRANS_SSL: esp_tls_conn_read error, errno=Socket is not connected
E (56992) TRANS_SSL: esp_tls_conn_read error, errno=Socket is not connected
E (56997) TRANS_SSL: esp_tls_conn_read error, errno=Socket is not connected
E (57007) TRANS_SSL: esp_tls_conn_read error, errno=Socket is not connected
E (57012) TRANS_SSL: esp_tls_conn_read error, errno=Socket is not connected
E (57022) TRANS_SSL: esp_tls_conn_read error, errno=Socket is not connected
E (57027) TRANS_SSL: esp_tls_conn_read error, errno=Socket is not connected
E (57037) TRANS_SSL: esp_tls_conn_read error, errno=Socket is not connected
E (57042) TRANS_SSL: esp_tls_conn_read error, errno=Socket is not connected
E (57052) TRANS_SSL: esp_tls_conn_read error, errno=Socket is not connected
E (57062) TRANS_SSL: esp_tls_conn_read error, errno=Socket is not connected
E (57067) TRANS_SSL: esp_tls_conn_read error, errno=Socket is not connected
E (57077) TRANS_SSL: esp_tls_conn_read error, errno=Socket is not connected
E (57082) TRANS_SSL: esp_tls_conn_read error, errno=Socket is not connected
E (57092) TRANS_SSL: esp_tls_conn_read error, errno=Socket is not connected
E (57097) TRANS_SSL: esp_tls_conn_read error, errno=Socket is not connected
E (57107) TRANS_SSL: esp_tls_conn_read error, errno=Socket is not connected
E (57112) TRANS_SSL: esp_tls_conn_read error, errno=Socket is not connected
E (57122) TRANS_SSL: esp_tls_conn_read error, errno=Socket is not connected
E (57127) TRANS_SSL: esp_tls_conn_read error, errno=Socket is not connected
E (57137) TRANS_SSL: esp_tls_conn_read error, errno=Socket is not connected
E (57142) TRANS_SSL: esp_tls_conn_read error, errno=Socket is not connected
E (57152) TRANS_SSL: esp_tls_conn_read error, errno=Socket is not connected
E (57157) TRANS_SSL: esp_tls_conn_read error, errno=Socket is not connected
E (57167) TRANS_SSL: esp_tls_conn_read error, errno=Socket is not connected
E (57172) TRANS_SSL: esp_tls_conn_read error, errno=Socket is not connected
E (57182) TRANS_SSL: esp_tls_conn_read error, errno=Socket is not connected
E (57192) TRANS_SSL: esp_tls_conn_read error, errno=Socket is not connected
E (57197) TRANS_SSL: esp_tls_conn_read error, errno=Socket is not connected
E (57207) TRANS_SSL: esp_tls_conn_read error, errno=Socket is not connected
E (57212) TRANS_SSL: esp_tls_conn_read error, errno=Socket is not connected
E (57222) TRANS_SSL: esp_tls_conn_read error, errno=Socket is not connected
E (57227) TRANS_SSL: esp_tls_conn_read error, errno=Socket is not connected
E (57237) TRANS_SSL: esp_tls_conn_read error, errno=Socket is not connected
E (57242) TRANS_SSL: esp_tls_conn_read error, errno=Socket is not connected
E (57252) TRANS_SSL: esp_tls_conn_read error, errno=Socket is not connected
E (57257) TRANS_SSL: esp_tls_conn_read error, errno=Socket is not connected
E (57267) TRANS_SSL: esp_tls_conn_read error, errno=Socket is not connected
E (57272) TRANS_SSL: esp_tls_conn_read error, errno=Socket is not connected
E (57282) TRANS_SSL: esp_tls_conn_read error, errno=Socket is not connected
E (57287) TRANS_SSL: esp_tls_conn_read error, errno=Socket is not connected
E (57297) TRANS_SSL: esp_tls_conn_read error, errno=Socket is not connected
E (57302) TRANS_SSL: esp_tls_conn_read error, errno=Socket is not connected
E (57312) TRANS_SSL: esp_tls_conn_read error, errno=Socket is not connected
E (57317) TRANS_SSL: esp_tls_conn_read error, errno=Socket is not connected
E (57327) TRANS_SSL: esp_tls_conn_read error, errno=Socket is not connected
E (57337) TRANS_SSL: esp_tls_conn_read error, errno=Socket is not connected
E (57342) TRANS_SSL: esp_tls_conn_read error, errno=Socket is not connected
E (57352) TRANS_SSL: esp_tls_conn_read error, errno=Socket is not connected
E (57357) TRANS_SSL: esp_tls_conn_read error, errno=Socket is not connected
E (57367) TRANS_SSL: esp_tls_conn_read error, errno=Socket is not connected
E (57372) TRANS_SSL: esp_tls_conn_read error, errno=Socket is not connected
E (57382) TRANS_SSL: esp_tls_conn_read error, errno=Socket is not connected
E (57387) TRANS_SSL: esp_tls_conn_read error, errno=Socket is not connected
E (57397) TRANS_SSL: esp_tls_conn_read error, errno=Socket is not connected
E (57402) TRANS_SSL: esp_tls_conn_read error, errno=Socket is not connected
E (57412) TRANS_SSL: esp_tls_conn_read error, errno=Socket is not connected
E (57417) TRANS_SSL: esp_tls_conn_read error, errno=Socket is not connected
E (57427) TRANS_SSL: esp_tls_conn_read error, errno=Socket is not connected
E (57432) TRANS_SSL: esp_tls_conn_read error, errno=Socket is not connected
E (57442) TRANS_SSL: esp_tls_conn_read error, errno=Socket is not connected
E (57447) TRANS_SSL: esp_tls_conn_read error, errno=Socket is not connected
E (57457) TRANS_SSL: esp_tls_conn_read error, errno=Socket is not connected
E (57467) TRANS_SSL: esp_tls_conn_read error, errno=Socket is not connected
E (57472) TRANS_SSL: esp_tls_conn_read error, errno=Socket is not connected
E (57482) TRANS_SSL: esp_tls_conn_read error, errno=Socket is not connected
E (57487) TRANS_SSL: esp_tls_conn_read error, errno=Socket is not connected
E (57497) TRANS_SSL: esp_tls_conn_read error, errno=Socket is not connected
E (57502) TRANS_SSL: esp_tls_conn_read error, errno=Socket is not connected
E (57512) TRANS_SSL: esp_tls_conn_read error, errno=Socket is not connected
E (57517) TRANS_SSL: esp_tls_conn_read error, errno=Socket is not connected
E (57527) TRANS_SSL: esp_tls_conn_read error, errno=Socket is not connected
E (57532) TRANS_SSL: esp_tls_conn_read error, errno=Socket is not connected
E (57542) TRANS_SSL: esp_tls_conn_read error, errno=Socket is not connected
E (57547) TRANS_SSL: esp_tls_conn_read error, errno=Socket is not connected
E (57557) TRANS_SSL: esp_tls_conn_read error, errno=Socket is not connected
E (57562) TRANS_SSL: esp_tls_conn_read error, errno=Socket is not connected
. . .

Other error scenarios like Wi-Fi reconnection, are handled correctly; esp_mqtt is then able to reconnect properly. It is only when the MQTT server connection is closed is it not able to reconnect.

@Alvin1Zhang Alvin1Zhang changed the title esp_mqtt reconnect error: TRANS_SSL: esp_tls_conn_read error, errno=Socket is not connected [TW#27831] esp_mqtt reconnect error: TRANS_SSL: esp_tls_conn_read error, errno=Socket is not connected Dec 8, 2018
@david-cermak
Copy link
Collaborator

Hi @rustyx

It is a bug in ssl transport component. There is already a fix ready in Espressif internal repo, but that still needs to be verified, merged and published to GitHub.

I am attaching a oneliner patch that should address the issue (before it is available in GitHub)
0001-tcp_transport-fixed-ssl-reconnection-issue.patch.txt

Thanks, David

@AadiMehta
Copy link

@david-cermak
Thanks david for the patch.

I confirm it works for me.

rustyx added a commit to rustyx/esp-idf that referenced this issue Dec 24, 2018
rustyx added a commit to rustyx/esp-idf that referenced this issue Jan 19, 2019
rustyx added a commit to rustyx/esp-idf that referenced this issue Jan 19, 2019
@igrr igrr closed this as completed in 0532192 Jan 24, 2019
catalinio pushed a commit to catalinio/pycom-esp-idf that referenced this issue Jun 28, 2019
@github-actions github-actions bot changed the title [TW#27831] esp_mqtt reconnect error: TRANS_SSL: esp_tls_conn_read error, errno=Socket is not connected [TW#27831] esp_mqtt reconnect error: TRANS_SSL: esp_tls_conn_read error, errno=Socket is not connected (IDFGH-2975) Mar 27, 2020
@david-cermak
Copy link
Collaborator

Hi @syed00727

One reason for this kind of error could be a memory corruption.
Also, there's been a recent fix of a race condition on closing mqtt connection here espressif/esp-mqtt@dc1a635. Could you please cherry-pick this commit and check if it resolves the issue?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants