Skip to main content

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [List Home]
[mosquitto-dev] QoS 2 publisher in C

Hello,

At the broker, I am running the subscriber program supplied by mosquitto.
mosquitto_sub -t "#" -v -q 2

At the client side, I am publishing messages in my own code. Oddly enough, the publisher, which I wrote in C, can only publish if I introduce a brief delay after each message.  Without a delay, it fails after a few messages. Is anybody familiar with this issue?

Second problem, since I am supposed to be using QoS=2, I have started mosquitto_sub AFTER publishing the messages. I was expecting the publisher to take delivery of the messages regardless but it doesn't. Is this normal?

My code is below.

Ahmet


#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <mosquitto.h>
#define mqttBroker "10.34.1.159"

struct mosquitto *mosq;
char versionMosquitto[256];

int mq_send(int mid, char *msg) {
  return mosquitto_publish(mosq,
                           &mid,        // NULL,
                           "test",
                           strlen(msg),
                           msg,
                           0,           // QoS
                           0);
}

char *mq_version() {
  int major, minor, revision;
  mosquitto_lib_version(&major, &minor, &revision);
  sprintf(versionMosquitto,
          "Mosquitto Ver. %d.%d.%d", major, minor, revision);
  return(versionMosquitto);
}


int main(int argc, char *argv[]) {
  char payload[43];
  int mid=0;

  mosquitto_lib_init();
  printf("%s\n", mq_version());

  mosq = mosquitto_new("clientId",      // QoS 2: required
                       false,           // QoS 2: false
                       NULL);
  if(mosquitto_connect(mosq, mqttBroker, 1883, 60)){
    fprintf(stderr, "Unable to connect.\n");
    exit(1);
  }


  mq_send(0, mq_version());
  for(mid=1; mid<20; mid++) {
    sprintf(payload, "%d", mid);
    printf("%s\n", payload);
    mq_send(mid, payload);
    usleep(50000);
  }

  mosquitto_disconnect(mosq);
  mosquitto_destroy(mosq);
  mosquitto_lib_cleanup();
  printf("Terminating.\n");
}




Back to the top