Hi,
There are some my functions:
Init:
int protocol_version = 3;
mosquitto_lib_init();
mosq = mosquitto_new(CLIENT_ID, true, NULL);
if(mosq)
    {
        //mosquitto_log_callback_set(mosq, VR_(my_log_callback));
        mosquitto_will_set(mosq, PUBLISH_RES_TOPIC, strlen("client disconnect"), 
                            (char*)"client disconnect", QOS1, false);
        mosquitto_connect_callback_set(mosq, VR_(mosquitto_connect_callback));
        mosquitto_message_callback_set(mosq, VR_(mosquitto_message_callback));
        mosquitto_disconnect_callback_set(mosq, VR_(mosquitto_disconnect_callback));
        mosquitto_subscribe_callback_set(mosq, VR_(mosquitto_subscribe_callback));
        mosquitto_tls_set(mosq, ROOT_CA_FILENAME, 
                                ROOT_CA, 
                                CERTIFICATE_FILENAME, 
                                PRIVATE_KEY_FILENAME, 
                                NULL);
        mosquitto_opts_set(mosq, MOSQ_OPT_PROTOCOL_VERSION, &protocol_version);
        //mosquitto_message_retry_set(mosq, 3);
        //mosquitto_reconnect_delay_set(mosq, 1, 5, false);
        int rc = pthread_create(&thread_mosquitto, NULL, (void *) &VR_(mosquitto_main_thread), NULL);
        if (rc != 0)
        {
            SLOGI("Can not create thread");
        }
        pthread_detach(thread_mosquitto);
    }
    else
    {
        SLOGE("FAILED TO CREATE MOSQUITTO\n");
        return -1;
    }
In mosquitto main thread:void VR_(mosquitto_main_thread)(void)
{    mosquitto_connect(mosq, mqtt_address, MQTT_PORT, 60);
    mosquitto_loop_start(mosq);
}
        pthread_create(&test_thread, NULL, (void *)&test_thread_cb, NULL);
        pthread_detach(test_thread);
        mosquitto_subscribe(mosq, NULL, SUBSCRIBE_REQ_TOPIC, QOS1);
        mosquitto_subscribe(mosq, NULL, SUBSCRIBE_CONTROL_TOPIC, QOS1);
        mosquitto_subscribe(mosq, NULL, SUBSCRIBE_TEST1_TOPIC, QOS1);
        mosquitto_subscribe(mosq, NULL, SUBSCRIBE_TEST2_TOPIC, QOS1);
Thanks
Tuan Nguyen