Hi Ian
Looks like I was too fast with raising the bug. I think the
problem is a result of my "wrong use" of the library API.
I tried to find out why the Socket_getReadySocket does not
return 0 but always a socket even though there was no network
traffic at that time. I found that my process had beside the 3
used sockets some "leaked" sockets:
sudo lsof -a -p <pid>
...
MqttSnGW 5632 root 12u IPv4 14541 0t0
TCP PiTwo:44388->
104.40.130.232:1883
(CLOSE_WAIT)
MqttSnGW 5632 root 14u IPv4 19362 0t0
TCP PiTwo:44666->
104.40.130.232:1883
(ESTABLISHED)
MqttSnGW 5632 root 15u IPv4 14985 0t0
TCP PiTwo:44403->
104.40.130.232:1883
(CLOSE_WAIT)
MqttSnGW 5632 root 16u IPv4 19365 0t0
TCP PiTwo:44667->
104.40.130.232:1883
(CLOSE_WAIT)
MqttSnGW 5632 root 17u IPv4 19371 0t0
TCP PiTwo:44669->
104.40.130.232:1883
(ESTABLISHED)
MqttSnGW 5632 root 18u IPv4 19427 0t0
TCP PiTwo:44674->
104.40.130.232:1883
(CLOSE_WAIT)
MqttSnGW 5632 root 19u IPv4 19446 0t0
TCP PiTwo:44676->
104.40.130.232:1883
(CLOSE_WAIT)
MqttSnGW 5632 root 20u IPv4 19488 0t0
TCP PiTwo:44680->
104.40.130.232:1883
(CLOSE_WAIT)
MqttSnGW 5632 root 21u IPv4 19505 0t0
TCP PiTwo:44682->
104.40.130.232:1883
(CLOSE_WAIT)
MqttSnGW 5632 root 22u IPv4 19543 0t0
TCP PiTwo:44686->
104.40.130.232:1883
(ESTABLISHED)
...
I then found out that in some situation my code destroyed
(MQTTClient_destroy) a connected client without a prior call
to MQTTClient_disconnect which results in the 'leaked'
sockets. I changed my code so it ensures it always
disconnects the client prior to destroying them and the
'leaked' sockets are gone. The gateway now runs for more
that one day and the CPU usage is still normal and the
Socket_getReadySocket return 0 when there is no network
traffic. So I'm quite confident that the problem is gone.
I will add this information to my bug report and leave it to
you to decide if the library should handle a destroy without
prior disconnect or if this is the responsibility of the
library user.
Regards