eclipse-paho / eclipse-paho/paho.mqtt.java
Why am I gettings Connection Lost exception
- Dominant language
- Java
- Stars
- 2.3k
- Forks
- 919
- PR merge metrics
- No merged PRs in 30d
Description
I've an Android app which uses Paho (1.2.0 and now 1.2.1) for MQTT. In crash logging, I see this exception:
```
Fatal Exception: j.b.a.a.a.o: Conexão perdida
at org.eclipse.paho.client.mqttv3.internal.CommsReceiver.run(CommsReceiver.java:189)
at java.lang.Thread.run(Thread.java:764)
Caused by javax.net.ssl.SSLException: Read error: ssl=0xdd0325e0: I/O error during system call, Software caused connection abort
at com.android.org.conscrypt.NativeCrypto.SSL_read(NativeCrypto.java)
at com.android.org.conscrypt.SslWrapper.read(SslWrapper.java:391)
at com.android.org.conscrypt.ConscryptFileDescriptorSocket$SSLInputStream.read(ConscryptFileDescriptorSocket.java:567)
at com.android.org.conscrypt.ConscryptFileDescriptorSocket$SSLInputStream.read(ConscryptFileDescriptorSocket.java:538)
at java.io.DataInputStream.readByte(DataInputStream.java:268)
at org.eclipse.paho.client.mqttv3.internal.wire.MqttInputStream.readMqttWireMessage(MqttInputStream.java:92)
at org.eclipse.paho.client.mqttv3.internal.CommsReceiver.run(CommsReceiver.java:136)
at java.lang.Thread.run(Thread.java:764)
```
But I don't see any reason why is that happening, or where should I catch it.
I create the client like this:
```kotlin
private val mqttAsyncClient = MqttAsyncClient(url, UUID.randomUUID().toString(), MemoryPersistence()).apply {
setCallback(object : MqttCallbackExtended {
override fun connectComplete(reconnect: Boolean, serverURI: String?) {
Timber.d("$threadName\tMQTT connection completed. Was reconnection? $reconnect")
if (reconnect) {
connectionCallback?.onReconnected()
} else {
connectionCallback?.onConnected()
}
}
override fun messageArrived(topic: String?, message: MqttMessage?) {
Timber.v("$threadName\tMQTT message arrived. Topic: $topic Message: $message")
}
override fun deliveryComplete(token: IMqttDeliveryToken?) {
Timber.v("$threadName\tMQTT message delivered.")
}
override fun connectionLost(cause: Throwable?) {
Timber.w(cause, "$threadName\tMQTT connection lost.")
connectionCallback?.onConnectionLost()
}
})
}
```
And in our testing, we couldn't reproduce it by switching the phone to airplane mode. The log _MQTT connection lost_ is logged and everything works fine. But still, it's one of the top crashes in our app.
Contributor guide
Assessment
This issue has not been assessed yet.