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;
}