mosquitto のバグ(たぶん)について

mosquitto は mqtt ブローカーの参照実装と言われるだけあって、安定していて使いやすいのですが、やはりバグがいくつかあります。(現状 Github で報告されている issue だけでもこれだけあります)

今回、私のプロジェクトにおいて関係するバグを備忘録として残しておきます。

Windows 環境において、 mosquitto_loop_stop(mosq, false) が正常に動作しない

github.com

期待される動作

mosquitto_loop_stop 関数は、ブローカーとの通信スレッドを停止する API ですが、第2引数 (bool force) の値によって以下のように動作が異なるという仕様です。

  • false の場合
    ブローカーとの通信終了における正常な手順である mosquitto_disconnect 関数をあらかじめコールしてからでないと、スレッドが終了しない。つまり、 mosquitto_disconnect 関数をコールせずに mosquitto_loop_stop(mosq, false) しても、制御が戻らない
  • true の場合
    mosquitto_disconnect 関数をコールしていないくても、強制的に通信スレッドを停止させる。ただし、この場合はブローカーはクライアントと異常切断したと判断する。(なので、 will が実行される)

バグの症状

ここで、 Windows 環境におけるバグですが、第2引数を true としても、強制的に通信スレッドを停止しません。つまり、第2引数が常に false として動作するということです。

一応対応策は上記 issue にて提案はされているのですが、既に2年ほど放置されています・・・

やはり OSS なので、困っている人が自分で解決してコントリビュートするべきですかねぇ

コメント

タイトルとURLをコピーしました