This post is older than 2 years and might not be relevant anymore
More Info: Consider searching for newer posts

Mqtt_connect -60 error

Hello,

I am working on the mqtt sample from ncs\nrf\samples\nrf9160\mqtt_simple. Mostly the nRF9160 connects to the MQTT server in the first attempt. But sometimes I observe the error mqtt_connect -60. The error is for connection timed out. It tries to reconnect again, but still returns the same error always.

The code:

/*
 * Copyright (c) 2018 Nordic Semiconductor ASA
 *
 * SPDX-License-Identifier: LicenseRef-BSD-5-Clause-Nordic
 */

#include <zephyr.h>
#include <stdio.h>
#include <uart.h>
#include <string.h>

#include <net/mqtt.h>
#include <net/socket.h>
#include <lte_lc.h>

#define APP_CONNECT_TRIES	10
#define APP_SLEEP_MSECS		500

/* Buffers for MQTT client. */
static u8_t rx_buffer[CONFIG_MQTT_MESSAGE_BUFFER_SIZE];
static u8_t tx_buffer[CONFIG_MQTT_MESSAGE_BUFFER_SIZE];
static u8_t payload_buf[CONFIG_MQTT_PAYLOAD_BUFFER_SIZE];

/* The mqtt client struct */
static struct mqtt_client client;

/* MQTT Broker details. */
static struct sockaddr_storage broker;

/* Connected flag */
static bool connected;

/* File descriptor */
static struct pollfd fds;

#if defined(CONFIG_BSD_LIBRARY)

/**@brief Recoverable BSD library error. */
void bsd_recoverable_error_handler(uint32_t err)
{
	printk("bsdlib recoverable error: %u\n", err);
}

/**@brief Irrecoverable BSD library error. */
void bsd_irrecoverable_error_handler(uint32_t err)
{
	printk("bsdlib irrecoverable error: %u\n", err);

	__ASSERT_NO_MSG(false);
}

#endif /* defined(CONFIG_BSD_LIBRARY) */

/**@brief Function to print strings without null-termination
 */
static void data_print(u8_t *prefix, u8_t *data, size_t len)
{
	char buf[len + 1];

	memcpy(buf, data, len);
	buf[len] = 0;
	printk("%s%s\n", prefix, buf);
}

/**@brief Function to publish data on the configured topic
 */
static int data_publish(struct mqtt_client *c, enum mqtt_qos qos,
	u8_t *data, size_t len)
{
	struct mqtt_publish_param param;

	param.message.topic.qos = qos;
	param.message.topic.topic.utf8 = CONFIG_MQTT_PUB_TOPIC;
	param.message.topic.topic.size = strlen(CONFIG_MQTT_PUB_TOPIC);
	param.message.payload.data = data;
	param.message.payload.len = len;
	param.message_id = sys_rand32_get();
	param.dup_flag = 0;
	param.retain_flag = 0;

	data_print("Publishing: ", data, len);
	printk("to topic: %s len: %u\n",
		CONFIG_MQTT_PUB_TOPIC,
		(unsigned int)strlen(CONFIG_MQTT_PUB_TOPIC));

	return mqtt_publish(c, &param);
}

/**@brief Function to subscribe to the configured topic
 */
static int subscribe(void)
{
	struct mqtt_topic subscribe_topic = {
		.topic = {
			.utf8 = CONFIG_MQTT_SUB_TOPIC,
			.size = strlen(CONFIG_MQTT_SUB_TOPIC)
		},
		.qos = MQTT_QOS_1_AT_LEAST_ONCE
	};

	const struct mqtt_subscription_list subscription_list = {
		.list = &subscribe_topic,
		.list_count = 1,
		.message_id = 1234
	};

	printk("Subscribing to: %s len %u\n", CONFIG_MQTT_SUB_TOPIC,
		(unsigned int)strlen(CONFIG_MQTT_SUB_TOPIC));

	return mqtt_subscribe(&client, &subscription_list);
}

/**@brief Function to read the published payload.
 */
static int publish_get_payload(struct mqtt_client *c, size_t length)
{
	u8_t *buf = payload_buf;
	u8_t *end = buf + length;

	if (length > sizeof(payload_buf)) {
		return -EMSGSIZE;
	}

	while (buf < end) {
		int ret = mqtt_read_publish_payload(c, buf, end - buf);

		if (ret < 0) {
			int err;

			if (ret != -EAGAIN) {
				return ret;
			}

			printk("mqtt_read_publish_payload: EAGAIN\n");

			err = poll(&fds, 1, K_SECONDS(CONFIG_MQTT_KEEPALIVE));
			if (err > 0 && (fds.revents & POLLIN) == POLLIN) {
				continue;
			} else {
				return -EIO;
			}
		}

		if (ret == 0) {
			return -EIO;
		}

		buf += ret;
	}

	return 0;
}

/**@brief MQTT client event handler
 */
void mqtt_evt_handler(struct mqtt_client *const c,
		      const struct mqtt_evt *evt)
{
	int err;

	switch (evt->type) {
	case MQTT_EVT_CONNACK:
		if (evt->result != 0) {
			printk("MQTT connect failed %d\n", evt->result);
			break;
		}

		connected = true;
		printk("[%s:%d] MQTT client connected!\n", __func__, __LINE__);
		subscribe();
		break;

	case MQTT_EVT_DISCONNECT:
		printk("[%s:%d] MQTT client disconnected %d\n", __func__,
		       __LINE__, evt->result);

		connected = false;
		break;

	case MQTT_EVT_PUBLISH: {
		const struct mqtt_publish_param *p = &evt->param.publish;

		printk("[%s:%d] MQTT PUBLISH result=%d len=%d\n", __func__,
		       __LINE__, evt->result, p->message.payload.len);
		err = publish_get_payload(c, p->message.payload.len);
		if (err >= 0) {
			data_print("Received: ", payload_buf,
				p->message.payload.len);
			/* Echo back received data */
			data_publish(&client, MQTT_QOS_1_AT_LEAST_ONCE,
				payload_buf, p->message.payload.len);
		} else {
			printk("mqtt_read_publish_payload: Failed! %d\n", err);
			printk("Disconnecting MQTT client...\n");

			err = mqtt_disconnect(c);
			if (err) {
				printk("Could not disconnect: %d\n", err);
			}
		}
	} break;

	case MQTT_EVT_PUBACK:
		if (evt->result != 0) {
			printk("MQTT PUBACK error %d\n", evt->result);
			break;
		}

		printk("[%s:%d] PUBACK packet id: %u\n", __func__, __LINE__,
				evt->param.puback.message_id);
		break;

	case MQTT_EVT_SUBACK:
		if (evt->result != 0) {
			printk("MQTT SUBACK error %d\n", evt->result);
			break;
		}

		printk("[%s:%d] SUBACK packet id: %u\n", __func__, __LINE__,
				evt->param.suback.message_id);
		break;

	default:
		printk("[%s:%d] default: %d\n", __func__, __LINE__,
				evt->type);
		break;
	}
}

/**@brief Resolves the configured hostname and
 * initializes the MQTT broker structure
 */
static void broker_init(void)
{
	int err;
	struct addrinfo *result;
	struct addrinfo *addr;
	struct addrinfo hints = {
		.ai_family = AF_INET,
		.ai_socktype = SOCK_STREAM
	};

	err = getaddrinfo(CONFIG_MQTT_BROKER_HOSTNAME, NULL, &hints, &result);
	if (err) {
		printk("ERROR: getaddrinfo failed %d\n", err);

		return;
	}

	addr = result;
	err = -ENOENT;

	/* Look for address of the broker. */
	while (addr != NULL) {
		/* IPv4 Address. */
		if (addr->ai_addrlen == sizeof(struct sockaddr_in)) {
			struct sockaddr_in *broker4 =
				((struct sockaddr_in *)&broker);
			char ipv4_addr[NET_IPV4_ADDR_LEN];

			broker4->sin_addr.s_addr =
				((struct sockaddr_in *)addr->ai_addr)
				->sin_addr.s_addr;
			broker4->sin_family = AF_INET;
			broker4->sin_port = htons(CONFIG_MQTT_BROKER_PORT);

			inet_ntop(AF_INET, &broker4->sin_addr.s_addr,
				  ipv4_addr, sizeof(ipv4_addr));
			printk("IPv4 Address found %s\n", ipv4_addr);

			break;
		} else {
			printk("ai_addrlen = %u should be %u or %u\n",
				(unsigned int)addr->ai_addrlen,
				(unsigned int)sizeof(struct sockaddr_in),
				(unsigned int)sizeof(struct sockaddr_in6));
		}

		addr = addr->ai_next;
		break;
	}

	/* Free the address. */
	freeaddrinfo(result);
}

/**@brief Initialize the MQTT client structure
 */
static void client_init(struct mqtt_client *client)
{

	mqtt_client_init(client);

	broker_init();

	/* MQTT client configuration */
	client->broker = &broker;
	client->evt_cb = mqtt_evt_handler;
	client->client_id.utf8 = (u8_t *)CONFIG_MQTT_CLIENT_ID;
	client->client_id.size = strlen(CONFIG_MQTT_CLIENT_ID);
	client->password = NULL;
	client->user_name = NULL;
	client->protocol_version = MQTT_VERSION_3_1_1;

	/* MQTT buffers configuration */
	client->rx_buf = rx_buffer;
	client->rx_buf_size = sizeof(rx_buffer);
	client->tx_buf = tx_buffer;
	client->tx_buf_size = sizeof(tx_buffer);

	/* MQTT transport configuration */
	client->transport.type = MQTT_TRANSPORT_NON_SECURE;
}

/**@brief Initialize the file descriptor structure used by poll.
 */
static int fds_init(struct mqtt_client *c)
{
	if (c->transport.type == MQTT_TRANSPORT_NON_SECURE) {
		fds.fd = c->transport.tcp.sock;
	} else {
#if defined(CONFIG_MQTT_LIB_TLS)
		fds.fd = c->transport.tls.sock;
#else
		return -ENOTSUP;
#endif
	}

	fds.events = POLLIN;

	return 0;
}

/**@brief Configures modem to provide LTE link. Blocks until link is
 * successfully established.
 */
static void modem_configure(void)
{
#if defined(CONFIG_LTE_LINK_CONTROL)
	if (IS_ENABLED(CONFIG_LTE_AUTO_INIT_AND_CONNECT)) {
		/* Do nothing, modem is already turned on
		 * and connected.
		 */
	} else {
		int err;

		printk("LTE Link Connecting ...\n");
		err = lte_lc_init_and_connect();
		__ASSERT(err == 0, "LTE link could not be established.");
                if(err){
                    printk("Could not establish link\n");
                }
		printk("LTE Link Connected!\n");
	}
#endif
}


static int try_to_connect(struct mqtt_client *c)
{
	int rc, i = 0;

	while (i++ < APP_CONNECT_TRIES && !connected) {

		client_init(c);

		rc = mqtt_connect(c);
		if (rc != 0) {
			printk("mqtt_connect %d\n", rc);
			k_sleep(APP_SLEEP_MSECS);
			continue;
		}


		rc = fds_init(c);
		if (rc != 0) {
			printk("ERROR: fds_init %d\n", rc);
			return -EINVAL;
		}

		if (poll(&fds, 1, K_SECONDS(CONFIG_MQTT_KEEPALIVE)) < 0) {
			printk("poll error: %d\n", errno);
		}
		mqtt_input(c);

		if (!connected) {
			mqtt_abort(c);
		}
	}

	if (connected) {
		return 0;
	}

	return -EINVAL;
}

static void mqtt_loop(void){
	int rc;
	
	printk("attempting to connect:\n ");
	
	rc = try_to_connect(&client);
        if (rc != 0) { return; }


	
	while (connected) {
		rc = poll(&fds, 1, K_SECONDS(CONFIG_MQTT_KEEPALIVE));
		if (rc < 0) {
			printk("ERROR: poll %d\n", errno);
			break;
		}

		rc = mqtt_live(&client);
		if (rc != 0) {
			printk("ERROR: mqtt_live %d\n", rc);
			break;
		}

		if ((fds.revents & POLLIN) == POLLIN) {
			rc = mqtt_input(&client);
			if (rc != 0) {
				printk("ERROR: mqtt_input %d\n", rc);
				break;
			}
		}

		if ((fds.revents & POLLERR) == POLLERR) {
			printk("POLLERR\n");
			break;
		}

		if ((fds.revents & POLLNVAL) == POLLNVAL) {
			printk("POLLNVAL\n");
			break;
		}
	}
	rc = mqtt_disconnect(&client);
	if (rc) {
		printk("Could not disconnect MQTT client. Error: %d\n", rc);
	}
}

void main(void){
	printk("The MQTT simple sample started\n");
	modem_configure();
	
	while(1){
		mqtt_loop();
		k_sleep(5000);
	}
	
}

When the nRF9160 connects to the mqtt server, the output is:

LTE Link Connecting ...
LTE Link Connected!
The MQTT simple sample started
attempting to connect:
IPv4 Address found 3.XX.XXX.XX
[mqtt_evt_handler:684] MQTT client connected!
Subscribing to: my/subscribe/topic len 18
[mqtt_evt_handler:734] SUBACK packet id: 1234

When it does not connect, the output is:

LTE Link Connecting ...
LTE Link Connected!
The MQTT simple sample started
attempting to connect:
IPv4 Address found 3.XX.XXX.XX
mqtt_connect -60
IPv4 Address found 3.XX.XXX.XX
mqtt_connect -60
IPv4 Address found 3.XX.XXX.XX
mqtt_connect -60

The code is same but still sometimes it does not connect. 

I refered to this ticket for the code to reattempt the connection to the server https://devzone.nordicsemi.com/f/nordic-q-a/49960/pollnval-simple-mqtt-re-connection-problem/215598#215598

How can I avoid this problem? 

  • Hello,

    I put those options in the prj.conf file and these are the outputs.

    Output when MQTT client is connected:

    LTE Link Connecting ...
    [00:00:00.237,823] <dbg> net_core.net_init: (0x20021da8): Priority 90
    [00:00:00.237,823] <dbg> net_pkt.net_pkt_init: (0x20021da8): Allocating 4 RX (256 bytes), 4 TX (256 bytes), 0 RX data (0 bytes) and 0 TX data (0 bytes) buffers
    [00:00:00.237,823] <dbg> net_core.l3_init: (0x20021da8): Network L3 init done
    [00:00:00.237,854] <dbg> net_if.net_if_init: (0x20021da8): 
    [00:00:00.237,854] <dbg> net_tc.net_tc_tx_init: (0x20021da8): [0] Starting TX queue 0x200202a4 stack 0x20023db8 size 1200 prio 7 (-9)
    [00:00:00.237,884] <dbg> net_if.init_iface: (0x20021da8): On iface 0x20029d40
    [00:00:00.237,915] <dbg> net_tc.net_tc_rx_init: (0x20021da8): [0] Starting RX queue 0x200201dc stack 0x20024268 size 1500 prio 7 (-9)
    [00:00:00.237,945] <dbg> net_if.net_if_post_init: (0x20021da8): 
    [00:00:00.237,945] <dbg> net_if.net_if_up: (0x20021da8): iface 0x20029d40
    LTE Link Connected!
    attempting to connect:
     IPv4 Address found 3.XX.XXX.XX
    [00:00:02.422,332] <dbg> net_mqtt_sock_tcp.mqtt_client_tcp_connect: (0x20021da8): Created socket 3
    [00:00:02.570,953] <dbg> net_mqtt_sock_tcp.mqtt_client_tcp_connect: (0x20021da8): Connect completed
    [00:00:02.570,983] <dbg> net_mqtt_enc.connect_request_encode: (0x20021da8): Encoding Protocol Description. Str:MQTT%s: (%p): << msg type:0x%02x length:0x%08x Size:00000004.
    [00:00:02.570,983] <dbg> net_mqtt_enc.pack_utf8_str: (0x20021da8): >> str_size:00000006 cur:0x200228a9, end:0x20022924
    [00:00:02.571,014] <dbg> net_mqtt_enc.pack_uint16: (0x20021da8): >> val:0004 cur:0x200228a9, end:0x20022924
    [00:00:02.571,014] <dbg> net_mqtt_enc.connect_request_encode: (0x20021da8): Encoding Protocol Version 04.
    [00:00:02.571,014] <dbg> net_mqtt_enc.pack_uint8: (0x20021da8): >> val:04 cur:0x200228af, end:0x20022924
    [00:00:02.571,044] <dbg> net_mqtt_enc.pack_uint8: (0x20021da8): >> val:00 cur:0x200228b0, end:0x20022924
    [00:00:02.571,044] <dbg> net_mqtt_enc.connect_request_encode: (0x20021da8): Encoding Keep Alive Time 003c.
    [00:00:02.571,044] <dbg> net_mqtt_enc.pack_uint16: (0x20021da8): >> val:003c cur:0x200228b1, end:0x20022924
    [00:00:02.571,075] <dbg> net_mqtt_enc.connect_request_encode: (0x20021da8): Encoding Client Id. Str:my-client-id Size:0000000c.
    [00:00:02.571,105] <dbg> net_mqtt_enc.pack_utf8_str: (0x20021da8): >> str_size:0000000e cur:0x200228b3, end:0x20022924
    [00:00:02.571,105] <dbg> net_mqtt_enc.pack_uint16: (0x20021da8): >> val:000c cur:0x200228b3, end:0x20022924
    [00:00:02.571,105] <dbg> net_mqtt_enc.mqtt_encode_fixed_header: (0x20021da8): << msg type:0x10 length:0x00000018
    [00:00:02.571,136] <dbg> net_mqtt_enc.packet_length_encode: (0x20021da8): >> length:0x00000018 cur:0x00000000, end:0x00000000
    [00:00:02.571,136] <dbg> net_mqtt_enc.mqtt_encode_fixed_header: (0x20021da8): Fixed header length = 02
    [00:00:02.571,136] <dbg> net_mqtt_enc.pack_uint8: (0x20021da8): >> val:10 cur:0x200228a7, end:0x20022924
    [00:00:02.571,166] <dbg> net_mqtt_enc.packet_length_encode: (0x20021da8): >> length:0x00000018 cur:0x200228a8, end:0x20022924
    [00:00:02.571,624] <dbg> net_mqtt.client_connect: (0x20021da8): Connect completed
    [mqtt_evt_handler:719] MQTT client connected!
    Subscribing to: my/subscribe/topic len 18
    [00:00:02.797,363] <dbg> net_mqtt_rx.mqtt_handle_packet: (0x20021da8): [CID 0x20020008]: Received MQTT_PKT_TYPE_CONNACK!
    --- 6 messages dropped ---
    [00:00:02.797,393] <dbg> net_mqtt_dec.unpack_uint8: (0x20021da8): >> cur:0x20022827, end:0x20022828
    [00:00:02.797,393] <dbg> net_mqtt_dec.unpack_uint8: (0x20021da8): << val:00
    [00:00:02.797,393] <dbg> net_mqtt_dec.connect_ack_decode: (0x20021da8): [CID 0x20020008]: session_present_flag: 0
    [00:00:02.797,424] <dbg> net_mqtt_rx.mqtt_handle_packet: (0x20021da8): [CID 0x20020008]: return_code: 0
    [00:00:02.805,419] <dbg> net_mqtt.mqtt_subscribe: (0x20021da8): [CID 0x20020008]:[State 0x06]: >> message id 0x04d2 topic count 0x0001
    [00:00:02.805,419] <dbg> net_mqtt_enc.pack_uint16: (0x20021da8): >> val:04d2 cur:0x200228a9, end:0x20022924
    [00:00:02.805,450] <dbg> net_mqtt_enc.pack_utf8_str: (0x20021da8): >> str_size:00000014 cur:0x200228ab, end:0x20022924
    [00:00:02.805,450] <dbg> net_mqtt_enc.pack_uint16: (0x20021da8): >> val:0012 cur:0x200228ab, end:0x20022924
    [00:00:02.805,450] <dbg> net_mqtt_enc.pack_uint8: (0x20021da8): >> val:01 cur:0x200228bf, end:0x20022924
    [00:00:02.805,480] <dbg> net_mqtt_enc.mqtt_encode_fixed_header: (0x20021da8): << msg type:0x82 length:0x00000017
    [00:00:02.805,480] <dbg> net_mqtt_enc.packet_length_encode: (0x20021da8): >> length:0x00000017 cur:0x00000000, end:0x00000000
    [00:00:02.805,480] <dbg> net_mqtt_enc.mqtt_encode_fixed_header: (0x20021da8): Fixed header length = 02
    [00:00:02.805,511] <dbg> net_mqtt_enc.pack_uint8: (0x20021da8): >> val:82 cur:0x200228a7, end:0x20022924
    [00:00:02.805,541] <dbg> net_mqtt_enc.packet_length_encode: (0x20021da8): >> length:0x00000017 cur:0x200228a8, end:0x20022924
    [00:00:02.805,572] <dbg> net_mqtt.client_write: (0x2[mqtt_evt_handler:769] SUBACK packet id: 1234
    0021da8): [0x20020008]: Transport writing 25 bytes.
    [00:00:02.805,938] <dbg> net_mqtt.client_write: (0x20021da8): [0x20020008]: Transport write complete.
    [00:00:02.805,969] <dbg> net_mqtt.mqtt_subscribe: (0x20021da8): [CID 0x20020008]:[State 0x06]: << result 0x00000000
    [00:00:02.974,304] <dbg> net_mqtt.mqtt_input: (0x20021da8): state:0x00000006
    [00:00:02.974,334] <dbg> net_mqtt_dec.unpack_uint8: (0x20021da8): >> cur:0x20022824, end:0x20022826
    [00:00:02.974,334] <dbg> net_mqtt_dec.unpack_uint8: (0x20021da8): << val:90
    [00:00:02.974,334] <dbg> net_mqtt_dec.packet_length_decode: (0x20021da8): length:0x00000003
    [00:00:02.974,395] <dbg> net_mqtt_rx.mqtt_handle_packet: (0x20021da8): [CID 0x20020008]: Received MQTT_PKT_TYPE_SUBACK!
    [00:00:02.974,395] <dbg> net_mqtt_dec.unpack_uint16: (0x20021da8): >> cur:0x20022826, end:0x20022829
    [00:00:02.974,395] <dbg> net_mqtt_dec.unpack_uint16: (0x20021da8): << val:04d2
    [00:00:02.974,426] <dbg> net_mqtt_dec.unpack_data: (0x20021da8): >> cur:0x20022828, end:0x20022829
    [00:00:02.974,426] <dbg> net_mqtt_dec.unpack_data: (0x20021da8): << bin len:00000001
     

    Output when MQTT client is not connected:

    LTE Link Connecting ...
    [00:00:00.237,823] <dbg> net_core.net_init: (0x20021da8): Priority 90
    [00:00:00.237,823] <dbg> net_pkt.net_pkt_init: (0x20021da8): Allocating 4 RX (256 bytes), 4 TX (256 bytes), 0 RX data (0 bytes) and 0 TX data (0 bytes) buffers
    [00:00:00.237,823] <dbg> net_core.l3_init: (0x20021da8): Network L3 init done
    [00:00:00.237,854] <dbg> net_if.net_if_init: (0x20021da8): 
    [00:00:00.237,854] <dbg> net_tc.net_tc_tx_init: (0x20021da8): [0] Starting TX queue 0x200202a4 stack 0x20023db8 size 1200 prio 7 (-9)
    [00:00:00.237,884] <dbg> net_if.init_iface: (0x20021da8): On iface 0x20029d40
    [00:00:00.237,915] <dbg> net_tc.net_tc_rx_init: (0x20021da8): [0] Starting RX queue 0x200201dc stack 0x20024268 size 1500 prio 7 (-9)
    [00:00:00.237,945] <dbg> net_if.net_if_post_init: (0x20021da8): 
    [00:00:00.237,945] <dbg> net_if.net_if_up: (0x20021da8): iface 0x20029d40
    LTE Link Connected!
    attempting to connect:
     IPv4 Address found 3.XX.XXX.XX
    [00:00:06.440,612] <dbg> net_mqtt_sock_tcp.mqtt_client_tcp_connect: (0x20021da8): Created socket 3
    mqtt_connect -60
    IPv4 Address found 3.XX.XXX.XX
    [00:00:30.564,788] <dbg> net_mqtt_sock_tcp.mqtt_client_tcp_connect: (0x20021da8): Created socket 3
    mqtt_connect -60
    IPv4 Address found 3.XX.XXX.XX
    [00:00:50.955,383] <dbg> net_mqtt_sock_tcp.mqtt_client_tcp_connect: (0x20021da8): Created socket 3
    mqtt_connect -60
    IPv4 Address found 3.XX.XXX.XX
    [00:01:11.745,971] <dbg> net_mqtt_sock_tcp.mqtt_client_tcp_connect: (0x20021da8): Created socket 3
    mqtt_connect -60
    IPv4 Address found 3.XX.XXX.XX
    [00:01:32.366,546] <dbg> net_mqtt_sock_tcp.mqtt_client_tcp_connect: (0x20021da8): Created socket 3
    mqtt_connect -60
    IPv4 Address found 3.XX.XXX.XX
    [00:01:52.900,573] <dbg> net_mqtt_sock_tcp.mqtt_client_tcp_connect: (0x20021da8): Created socket 3
    mqtt_connect -60
    IPv4 Address found 3.XX.XXX.XX
    [00:02:13.732,727] <dbg> net_mqtt_sock_tcp.mqtt_client_tcp_connect: (0x20021da8): Created socket 3
    mqtt_connect -60
    IPv4 Address found 3.XX.XXX.XX
    [00:02:34.523,376] <dbg> net_mqtt_sock_tcp.mqtt_client_tcp_connect: (0x20021da8): Created socket 3
    mqtt_connect -60
    IPv4 Address found 3.XX.XXX.XX
    [00:02:55.483,947] <dbg> net_mqtt_sock_tcp.mqtt_client_tcp_connect: (0x20021da8): Created socket 3
    mqtt_connect -60
    IPv4 Address found 3.XX.XXX.XX
    [00:03:16.049,530] <dbg> net_mqtt_sock_tcp.mqtt_client_tcp_connect: (0x20021da8): Created socket 3
    mqtt_connect -60
     

    It tries to connect for 10 times as it is defined in the program, after that it stops.

    It tries to reconnect for 10 times but still it fails. 

    Do I need to add something in the program?

    Thank you in advance.

  • Hi,

    I found what was the problem and the solution to that. It was the networking error. That's why, even if i tried to reconnect for so many times, the client did not connect to the mqtt server. So the error was not related to mqtt.

    So when the mqtt_connect -60 error occurred, I turned off the Modem. Then before reconnecting, first I connected to the LTE link and then the mqtt client connected to the broker.

    Now the output is like this:

    LTE Link Connecting ...
    [00:00:00.240,234] <dbg> net_core.net_init: (0x20021da8): Priority 90
    [00:00:00.240,234] <dbg> net_pkt.net_pkt_init: (0x20021da8): Allocating 4 RX (256 bytes), 4 TX (256 bytes), 0 RX data (0 bytes) and 0 TX data (0 bytes) buffers
    [00:00:00.240,234] <dbg> net_core.l3_init: (0x20021da8): Network L3 init done
    [00:00:00.240,264] <dbg> net_if.net_if_init: (0x20021da8): 
    [00:00:00.240,264] <dbg> net_tc.net_tc_tx_init: (0x20021da8): [0] Starting TX queue 0x200202a4 stack 0x20023db8 size 1200 prio 7 (-9)
    [00:00:00.240,295] <dbg> net_if.init_iface: (0x20021da8): On iface 0x20029d40
    [00:00:00.240,325] <dbg> net_tc.net_tc_rx_init: (0x20021da8): [0] Starting RX queue 0x200201dc stack 0x20024268 size 1500 prio 7 (-9)
    [00:00:00.240,356] <dbg> net_if.net_if_post_init: (0x20021da8): 
    [00:00:00.240,356] <dbg> net_if.net_if_up: (0x20021da8): iface 0x20029d40
    LTE Link Connected!
    attempting to connect:
     IPv4 Address found 3.XX.XXX.XX
    [00:00:02.258,666] <dbg> net_mqtt_sock_tcp.mqtt_client_tcp_connect: (0x20021da8): Created socket 3
    mqtt_connect -60
    Modem Turn OFF
    LTE Link Connecting ...
    LTE Link Connected!
    attempting to connect:
     IPv4 Address found 3.XX.XXX.XX
    [00:00:31.218,231] <dbg> net_mqtt_sock_tcp.mqtt_client_tcp_connect: (0x20021da8): Created socket 3
    [00:fds_init ok
    00:31.371,887] <dbg> net_mqtt_sock_tcp.mqtt_client_tcp_connect: (0x20021da8): Connect completed
    [00:00:31.371,887] <dbg> net_mqtt_enc.connect_request_encode: (0x20021da8): Encoding Protocol Description. Str:MQTT%s: (%p): << msg type:0x%02x length:0x%08x Size:00000004.
    [00:00:31.371,887] <dbg> net_mqtt_enc.pack_utf8_str: (0x20021da8): >> str_size:00000006 cur:0x200228a9, end:0x20022924
    [00:00:31.371,917] <dbg> net_mqtt_enc.pack_uint16: (0x20021da8): >> val:0004 cur:0x200228a9, end:0x20022924
    [00:00:31.371,917] <dbg> net_mqtt_enc.connect_request_encode: (0x20021da8): Encoding Protocol Version 04.
    [00:00:31.371,917] <dbg> net_mqtt_enc.pack_uint8: (0x20021da8): >> val:04 cur:0x200228af, end:0x20022924
    [00:00:31.371,948] <dbg> net_mqtt_enc.pack_uint8: (0x20021da8): >> val:00 cur:0x200228b0, end:0x20022924
    [00:00:31.371,948] <dbg> net_mqtt_enc.connect_request_encode: (0x20021da8): Encoding Keep Alive Time 003c.
    [00:00:31.371,948] <dbg> net_mqtt_enc.pack_uint16: (0x20021da8): >> val:003c cur:0x200228b1, end:0x20022924
    [00:00:31.371,978] <dbg> net_mqtt_enc.connect_request_encode: (0x20021da8): Encoding Client Id. Str:my-client-id Size:0000000c.
    [00:00:31.372,009] <dbg> net_mqtt_enc.pack_utf8_str: (0x20021da8): >> str_size:0000000e cur:0x200228b3, end:0x20022924
    [00:00:31.372,009] <dbg> net_mqtt_enc.pack_uint16: (0x20021da8): >> val:000c cur:0x200228b3, end:0x20022924
    [00:00:31.372,009] <dbg> net_mqtt_enc.mqtt_encode_fixed_header: (0x20021da8): << msg type:0x10 length:0x00000018
    [00:00:31.372,039] <dbg> net_mqtt_enc.packet_length_encode: (0x20021da8): >> length:0x00000018 cur:0x00000000, end:0x00000000
    [00:00:31.372,039] <dbg> net_mqtt_enc.mqtt_encode_fixed_header: (0x20021da8): Fixed header length = 02
    [00:00:31.372,039] <dbg> net_mqtt_enc.pack_uint8: (0x20021da8): >> val:10 cur:0x200228a7, end:0x20022924
    [00:00:31.372,070] <dbg> net_mqtt_enc.packet_length_encode: (0x20021da8): >> length:0x00000018 cur:0x200228a8, end:0x20022924
    [00:00:31.372,528] <dbg> net_mqtt.client_connect: (0x20021da8): Connect completed
    Poll ok inside try_to_connect
    [mqtt_evt_handler:719] MQTT client connected!
    Subscribing to: my/subscribe/topic len 18
    [00:00:31.601,013] <dbg> net_mqtt_rx.mqtt_handle_packet: (0x20021da8): [CID 0x20020008]: Received MQTT_PKT_TYPE_CONNACK!
    --- 6 messages dropped ---
    [00:00:31.601,043] <dbg> net_mqtt_dec.unpack_uint8: (0x20021da8): >> cur:0x20022827, end:0x20022828
    [00:00:31.601,043] <dbg> net_mqtt_dec.unpack_uint8: (0x20021da8): << val:00
    [00:00:31.601,043] <dbg> net_mqtt_dec.connect_ack_decode: (0x20021da8): [CID 0x20020008]: session_present_flag: 0
    [00:00:31.601,074] <dbg> net_mqtt_rx.mqtt_handle_packet: (0x20021da8): [CID 0x20020008]: return_code: 0
    [00:00:31.609,069] <dbg> net_mqtt.mqtt_subscribe: (0x20021da8): [CID 0x20020008]:[State 0x06]: >> message id 0x04d2 topic count 0x0001
    [00:00:31.609,069] <dbg> net_mqtt_enc.pack_uint16: (0x20021da8): >> val:04d2 cur:0x200228a9, end:0x20022924
    [00:00:31.609,100] <dbg> net_mqtt_enc.pack_utf8_str: (0x20021da8): >> str_size:00000014 cur:0x200228ab, end:0x20022924
    [00:00:31.609,100] <dbg> net_mqtt_enc.pack_uint16: (0x20021da8): >> val:0012 cur:0x200228ab, end:0x20022924
    [00:00:31.609,100] <dbg> net_mqtt_enc.pack_uint8: (0x20021da8): >> val:01 cur:0x200228bf, end:0x20022924
    [00:00:31.609,130] <dbg> net_mqtt_enc.mqtt_encode_fixed_header: (0x20021da8): << msg type:0x82 length:0x00000017
    [00:00:31.609,130] <dbg> net_mqtt_enc.packet_length_encode: (0x20021da8): >> length:0x00000017 cur:0x00000000, end:0x00000000
    [00:00:31.609,130] <dbg> net_mqtt_enc.mqtt_encode_fixed_header: (0x20021da8): Fixed header length = 02
    [00:00:31.609,161] <dbg> net_mqtt_enc.pack_uint8: (0x20021da8): >> val:82 cur:0x200228a7, end:0x20022924
    [00:00:31.609,191] <dbg> net_mqtt_enc.packet_length_encode: (0x20021da8): >> length:0x00000017 cur:0x[mqtt_evt_handler:769] SUBACK packet id: 1234
    200228a8, end:0x20022924
    [00:00:31.609,222] <dbg> net_mqtt.client_write: (0x20021da8): [0x20020008]: Transport writing 25 bytes.
    [00:00:31.609,588] <dbg> net_mqtt.client_write: (0x20021da8): [0x20020008]: Transport write complete.
    [00:00:31.609,619] <dbg> net_mqtt.mqtt_subscribe: (0x20021da8): [CID 0x20020008]:[State 0x06]: << result 0x00000000
    [00:00:31.770,233] <dbg> net_mqtt.mqtt_input: (0x20021da8): state:0x00000006
    [00:00:31.770,263] <dbg> net_mqtt_dec.unpack_uint8: (0x20021da8): >> cur:0x20022824, end:0x20022826
    [00:00:31.770,263] <dbg> net_mqtt_dec.unpack_uint8: (0x20021da8): << val:90
    [00:00:31.770,263] <dbg> net_mqtt_dec.packet_length_decode: (0x20021da8): length:0x00000003
    [00:00:31.770,324] <dbg> net_mqtt_rx.mqtt_handle_packet: (0x20021da8): [CID 0x20020008]: Received MQTT_PKT_TYPE_SUBACK!
    [00:00:31.770,324] <dbg> net_mqtt_dec.unpack_uint16: (0x20021da8): >> cur:0x20022826, end:0x20022829
    [00:00:31.770,324] <dbg> net_mqtt_dec.unpack_uint16: (0x20021da8): << val:04d2
    [00:00:31.770,355] <dbg> net_mqtt_dec.unpack_data: (0x20021da8): >> cur:0x20022828, end:0x20022829
    [00:00:31.770,355] <dbg> net_mqtt_dec.unpack_data: (0x20021da8): << bin len:00000001

    Thank you for your help.

Related