Mosquitto.h 未定义 "struct mosquitto" 内容

Mosquitto.h does not define "struct mosquitto" contents

据我了解,当客户端连接时,我必须检查会话是否持久,如果不是,则执行订阅感兴趣的主题。我正在使用 Mosquitto 1.5 版。

我没有找到使用 API 调用检查此 属性 的方法,但发现 struct mosquitto 中有 clean_session 布尔字段。但是当我尝试以这种方式访问​​它时:

void my_connect_callback(struct mosquitto *mosq, void *userdata, int result)
{
    log("Connected, session persistency",(int)(mosq->clean_session));

我收到错误 取消引用指向不完整类型的指针。一旦 mosquitto.h 没有定义 struct mosquitto 中的字段,这似乎是正常的。名为 mosquitto_internal.h 的文件确实有它,但它似乎并未设计为包含在应用程序项目中。

这里有什么问题?

更新(在@hardillb 评论之后): (1) 我没有找到文档说明 mosquitto 结构中的 clean_session 与我传递给 mosquitto_new; (2) 文档 here

The CONNACK message contains two data entries:

  • The session present flag
  • A connect return code

“会话存在标志”在连接回调数据或 mosquitto 结构本身中的某处是合乎逻辑的。因此我猜测结构中的 clean_session 是连接函数返回的值。接下来,同一来源说:

The session present flag tells the client whether the broker already has a persistent session available from previous interactions with the client. When a client connects with Clean Session set to true, the session present flag is always false because there is no session available. If a client connects with Clean Session set to false, there are two possibilities: If session information is available for the clientId. and the broker has stored session information, the session present flag is true.

这个 session_present 标志在哪里 - 以便应用程序知道当前连接是先前连接的延续并且不会重新订阅相同的主题?

查看 source 代码意味着您应该使用 mosquitto_connect_with_flags_callback_set() 而不是 mosquitto_connect_callback_set()

并传递一个回调函数指针,该指针在 args 末尾带有一个额外的 int 字段。

int 字段将保存 CONNACK flags(基本上是 0 或 1)

man 页面确实缺少回调。