Mosquitto socket fd how to add in uloop

Hi, I want to use uloop manage mosquitto network event, but I found uloop cound not read connack from broker.could give me some suggestion?

#include <stdio.h>
#include <mosquitto.h>
#include <libubox/uloop.h>

#define MQTT_HOST "localhost"
#define MQTT_PORT 1883
#define MQTT_KEEPALIVE 60

struct mosquitto *mosq = NULL;
struct uloop_fd mosquitto_ufd;

void on_connect(struct mosquitto *mosq, void *obj, int rc) {
    if (rc) {
        printf("Error with result code: %d\n", rc);Preformatted text
    } else {
        printf("Connected to MQTT broker\n");
    }
}

void on_message(struct mosquitto *mosq, void *obj, const struct mosquitto_message *msg) {
    if (msg->payload) {
        printf("Received message on topic %s: %s\n", msg->topic, (char *)msg->payload);
    }
}

void mosquitto_fd_handler(struct uloop_fd *u, unsigned int events) {
    int fd = mosquitto_socket(mosq);
    if (fd == -1) return;

    mosquitto_loop_read(mosq, 1);
    mosquitto_loop_write(mosq, 1);
    mosquitto_loop_misc(mosq);
}

int main() {
    mosquitto_lib_init();

    uloop_init();

    mosq = mosquitto_new(NULL, true, NULL);
    if (!mosq) {
        fprintf(stderr, "Error: Out of memory.\n");
        return -1;
    }
    mosquitto_connect_callback_set(mosq, on_connect);
    mosquitto_message_callback_set(mosq, on_message);

    if (mosquitto_connect(mosq, MQTT_HOST, MQTT_PORT, MQTT_KEEPALIVE)) {
        fprintf(stderr, "Unable to connect.\n");
        return -1;
    }

    int fd = mosquitto_socket(mosq);
    if (fd >= 0) {
        mosquitto_ufd.fd = fd;
        mosquitto_ufd.cb = mosquitto_fd_handler;
        uloop_fd_add(&mosquitto_ufd, ULOOP_READ | ULOOP_WRITE);
    }

    uloop_run();

    uloop_done();
    mosquitto_disconnect(mosq);
    mosquitto_destroy(mosq);
    mosquitto_lib_cleanup();

    return 0;
}

This question does not seem specific to OpenWrt, I think you will get better support on mosquitto' forum.

Thanks!I'll check it out!