eclipse-paho / eclipse-paho/paho.mqtt.java

Why am I gettings Connection Lost exception

Open
#670 0 comments 4 reactions 0 assignees View on GitHub
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

Open the contributing guide

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.