OK. Thanks very much.

-- 
You received this bug notification because you are a member of Mosquitto
Development, which is subscribed to mosquitto.
https://bugs.launchpad.net/bugs/1261683

Title:
  synchronous/blocking mode is not really supported

Status in mosquitto: an mqtt message broker:
  New

Bug description:
  It seems that blocking mode is not really supported.

  Topology: publisher -- broker -- subscriber
  Publisher simply publish a message then exit.
  Subscriber sometimes can receive message published by publisher, but 
sometimes not.

  The root cause is, libmosquitto does not really support blocking mode.
  mosquitto_connect_bind --> _mosquitto_reconnect --> _mosquitto_send_connect
  That means mosquitto_connect_bind() does not wait until CONNACK arrives.

  Logs can prove that:
  ----
  1387273535: New connection from 172.18.111.243 on port 1883.
  1387273535: New client connected from 172.18.111.243 as TestClientId (c1, 
k3600).
  1387273535: Sending CONNACK to TestClientId (0)
  1387273535: Socket error on client TestClientId, disconnecting.
  ----
  We can see:
  1) Broker has not received PUBLISH message from publisher.
  2) Broker has not received DISCONNECT message from publisher.

  All because blocking mode is not really supported.

  In blocking mode,
  mosquitto_connect_bind should wait until CONNACK arrives;
  If QoS not 0, mosquitto_publish should wait unit ...
  mosquitto_subscribe should wait unit ...
  ...


  
  Here is code of the publisher:

  #include <errno.h>
  #include <stdio.h>
  #include <stdlib.h>
  #include <string.h>
  #include <unistd.h>
  #include "mosquitto.h"

  #define dbg(fmt, args...) \
      printf("%s(%u): "fmt"\n", __FUNCTION__, __LINE__, ##args)

  int main(int argc, char *argv[])
  {
      struct mosquitto *mosq = NULL;
      int rv;
      const char topic[] = "TestTopic";
      const char buf[]   = "Hello, world";

      if (MOSQ_ERR_SUCCESS != mosquitto_lib_init()) {
          return -1;
      }

      if (NULL == (mosq = mosquitto_new("TestClientId", 1, NULL))) {
          dbg("mosquitto_new() failed");
          rv = -1;
          goto quit;
      }

      rv = mosquitto_connect_bind(mosq, "172.18.111.245", 1883, 3600, 
"172.18.111.243");
      if (MOSQ_ERR_SUCCESS != rv) {
          dbg("mosquitto_connect_bind() failed: %s", mosquitto_strerror(rv));
          if (MOSQ_ERR_ERRNO == rv) {
              dbg("errno = %d: %s", errno, strerror(errno));
          }
          rv = -1;
          goto quit;
      }

      if (MOSQ_ERR_SUCCESS != mosquitto_publish(mosq, NULL, topic, sizeof(buf), 
buf, 0, 0)) {
          dbg("mosquitto_publish to %s failed", topic);
          rv = -1;
          goto quit;
      }

  quit:
      if (NULL != mosq) {
          mosquitto_disconnect(mosq);
          mosquitto_destroy(mosq);
      }
      mosquitto_lib_cleanup();
      return rv;
  }

To manage notifications about this bug go to:
https://bugs.launchpad.net/mosquitto/+bug/1261683/+subscriptions

-- 
Mailing list: https://launchpad.net/~mosquitto-devel
Post to     : [email protected]
Unsubscribe : https://launchpad.net/~mosquitto-devel
More help   : https://help.launchpad.net/ListHelp

Reply via email to