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()
он может только вернуть успех, исключая любые другие ошибки. Когда клиент пытается отправить эту публикацию, он обнаруживает, что сеть не работает, и поэтому любые последующие публикации возвращают соответствующую ошибку.