2017-03-06 99 views
0

我使用Mosquitto連接到MQTT代理C客戶端庫。mosquitto_publish返回MOSQ_ERR_SUCCESS eventhough MQTT代理未運行

我使用下面的代碼進行連接。

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

連接到代理後,我停止了代理服務。

現在我試着用下面的代碼發佈消息。

ret = mosquitto_publish(mosq,NULL,topic,strlen(text),text,1,1);

儘管代理正在運行,但mosquitto_publish API返回成功。 當第二次調用mosquitto_publish API時,它返回14.

爲什麼mosquitto_publish返回成功,雖然代理正在運行?如何解決此問題?

在此先感謝。

+0

哪種語言是客戶端? java嗎?蟒蛇? –

+0

我正在使用Mosquitto C客戶端庫。我也嘗試過使用Paho C MQTT客戶端庫,這對於這種情況的行爲太類似了。 – user369287

回答

0

當與mosquitto_start()一起使用時,mosquitto_publish()函數完全是異步的。它所做的只是向隊列中添加一條新消息並喚醒網絡線程。如果客戶端最後一次嘗試與代理進行通信時一切正常,那麼我們無法知道連接已斷開。當你致電mosquitto_publish()它只能返回成功,禁止任何其他錯誤。當客戶端嘗試發送該發佈時,它會發現網絡已關閉,因此任何後續發佈都將返回相應的錯誤。