** Summary changed: - Blocking mode is not really supported + synchronous/blocking mode is not really supported
-- 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

