[Top][All Lists]

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[lwip-devel] MQTT unable to connect

From: Danny Con
Subject: [lwip-devel] MQTT unable to connect
Date: Wed, 19 May 2021 09:16:08 +0000



I hope someone recognizes my issue. I run an NXP platform (RT1064) with FreeRTOS. One task runs our application and one task runs lwIP with MQTT enabled. I noticed that if I disable MQTT, the TCP connection is stable, I can ping it forever, however, when I enable MQTT and initialize it, the platform can only be pinged for about 20 seconds; then the lwIP stack seems to stop, see the call stack.


In Wireshark I observe a lot of SYN retransmissions, I  cannot explain this. The MQTT connection is never set up successfully, however, mqtt_client_connect() returns OK. Here is the MQTT part of my code, I followed the example:


static mqtt_client_t clt;


void Host_Comm_recv(void *pvParameters)   // The FreeRTOS task


    while (!Ethernet_stack_started())


        // Wait for the ethernet stack to get started.








    while (1)








static void mqtt_do_connect(mqtt_client_t* client)


    struct mqtt_connect_client_info_t ci;

    ip_addr_t ip_addr;


    ip_addr.addr = PP_HTONL(LWIP_MAKEU32(192, 168, 0, 101));


    /* Setup an empty client info structure */

    memset(&ci, 0, sizeof(ci));


    /* Minimal amount of information required is client identifier, so set it here */

    ci.client_id = "mqtt_test";


    /* Initiate client and connect to server, if this fails immediately an error code is returned

    otherwise mqtt_connection_cb will be called with connection result after attempting

    to establish a connection with the server.

    For now MQTT version 3.1.1 is always used */



    mqtt_client_connect(client, &ip_addr, MQTT_PORT, mqtt_connection_cb, 0, &ci);




static void mqtt_connection_cb(mqtt_client_t *client, void *arg, mqtt_connection_status_t status)


    err_t err;


    if (status == MQTT_CONNECT_ACCEPTED)


        // This part is never reached…


        if (mqtt_client_is_connected(client))




            /* Setup callback for incoming publish requests */

            mqtt_set_inpub_callback(client, mqtt_incoming_publish_cb, mqtt_incoming_data_cb, arg);


            /* Subscribe to a topic named "subtopic" with QoS level 1, call mqtt_sub_request_cb with result */

            err = mqtt_subscribe(client, "subtopic", 1, mqtt_sub_request_cb, arg);




            if(err != ERR_OK)


                volatile err_t e = err;







        /* Its more nice to be connected, so try to reconnect */





The call stack when a reconnect is attempted:


Cremer_Base LinkServer Debug [C/C++ (NXP Semiconductors) MCU Application]        

                Cremer_Base.axf [MIMXRT1064xxxxA (cortex-m7)]    

                               Thread #1 1 (Suspended : Breakpoint) 

                                               mqtt_connection_cb() at host_comm.c:159 0x700385fc             

                                               mqtt_close() at mqtt.c:565 0x7002b554              

                                               mqtt_tcp_err_cb() at mqtt.c:1.022 0x7002ba98              

                                               tcp_slowtmr() at tcp.c:1.413 0x700262ae            

                                               tcp_tmr() at tcp.c:242 0x700252b0         

                                               tcpip_tcp_timer() at timeouts.c:149 0x7002a490            

                                               sys_check_timeouts() at timeouts.c:390 0x7002a7a0   

                                               tcpip_timeouts_mbox_fetch() at tcpip.c:109 0x70053d0a          

                                               tcpip_thread() at tcpip.c:142 0x70032928           

                                               pxPortInitialiseStack() at port.c:216 0x70034c04              

                arm-none-eabi-gdb (   


The connection is closed on purpose because variable pcb_remove > 0. I don’t know what this means, but this seems the cause of the closed connection.


I have a direct eth connection with another PC running the MQTT Broker, so no router is applied.


I also attached the Wireshark log.


Thanks in advance,


Attachment: ws-dump.PNG
Description: ws-dump.PNG

reply via email to

[Prev in Thread] Current Thread [Next in Thread]