in src/mqtt_client.c [96:122]
static void close_connection(MQTT_CLIENT* mqtt_client)
{
if (mqtt_client->mqtt_status & MQTT_STATUS_SOCKET_CONNECTED)
{
(void)xio_close(mqtt_client->xioHandle, on_connection_closed, mqtt_client);
if (mqtt_client->disconnect_cb == NULL)
{
size_t counter = 0;
do
{
xio_dowork(mqtt_client->xioHandle);
counter++;
ThreadAPI_Sleep(2);
} while (mqtt_client->mqtt_status & MQTT_STATUS_SOCKET_CONNECTED && counter < MAX_CLOSE_RETRIES);
}
// Clear the handle because we don't use it anymore
mqtt_client->xioHandle = NULL;
}
else
{
mqtt_client->mqtt_status &= ~MQTT_STATUS_SOCKET_CONNECTED;
if (mqtt_client->disconnect_cb)
{
mqtt_client->disconnect_cb(mqtt_client->disconnect_ctx);
}
}
}