На основании документации mosquitto_publich функция возвращается, когда отправка была "успешной". MQTT не гарантирует порядок, в котором сообщения прибывают , поэтому вы, вероятно, должны следить за прибытием, а не за отправкой, и избегать того, чтобы два сообщения передавались друг другу брокеру.При QoS 0 клиент никогда не знает, поступило ли сообщение;это требует QoS 1 или 2, для которого обмениваются дополнительными коммуникациями.Повысьте качество обслуживания, и вы можете использовать mosquitto_max_inflight_messages_set (mosq, 1), чтобы клиент помещал в очередь любые дополнительные сообщения, пока не получит подтверждение от сервера.Это может быть даже более эффективным, чем «ожидание» завершения, поскольку операции, не относящиеся к MQTT, могут продолжаться.Очередь может накапливаться, если вы отправляете пакеты из многих сообщений.
Более сложная альтернатива - отправлять сообщения без ограничений, но включать индекс для каждого, чтобы подписчик мог отсортировать их при получении (для чего он будетнужна своя очередь и задержка).Не рекомендуется, если это бремя будет ложиться на нескольких подписчиков.