mosquitto_publish возвращает MOSQ_ERR_SUCCESS, даже если MQTT-брокер не работает

Я подключился к брокеру MQTT, используя клиентскую библиотеку Mosquitto C.

Я использовал приведенный ниже код для подключения.

ret = mosquitto_connect (mosq, MQTT_HOSTNAME, MQTT_PORT, 0);

После подключения к брокеру я остановил службу брокера.

Теперь я попытался опубликовать сообщение, используя приведенный ниже код.

ret = mosquitto_publish (mosq, NULL, тема, strlen (текст), текст, 1, 1);

Даже если брокер работает, API mosquitto_publish возвращает успех. При повторном вызове API mosquitto_publish возвращается 14.

Почему mosquitto_publish возвращает успех, хотя брокер работает? Как решить эту проблему?

Заранее спасибо.

1 ответ

Решение

При использовании вместе с mosquitto_start(), mosquitto_publish() Функция полностью асинхронная. Все, что он делает, это добавляет новое сообщение в очередь и пробуждает сетевой поток. Если в прошлый раз, когда клиент пытался связаться с брокером, все было в порядке, мы не можем знать, что соединение разорвано. Когда вы звоните mosquitto_publish() он может только вернуть успех, исключая любые другие ошибки. Когда клиент пытается отправить эту публикацию, он обнаруживает, что сеть не работает, и поэтому любые последующие публикации возвращают соответствующую ошибку.

Другие вопросы по тегам