Hi all!

I'm working with FreeRTOS v7.0.1 and LwIP 1.4.0 on a Freescale Kinetis K60.

In my application, I need to listen to three different TCP ports. There are
three
different devices that are supposed to connect to the one Im devoloping, and
I would like them to connect to three different listening ports.

In a past thread of this list called "Multiple connections at the same time
(netconns)",
Gregory had posted:

In other words I must to have
a multiple opened connections waiting for incoming data. Is that true, that I
must to create task for particular connection?

This is my idea (it's working, but uses too much RAM):

// - Server task -----------------------------------
void server(void *parameters)
{
    struct netconn *conn = NULL;
    struct netconn *newconn = NULL;
    conn = netconn_new(NETCONN_TCP);
    netconn_bind(conn, NULL, 502);
    netconn_listen(conn);
    for (;;)
    {
        newconn = netconn_accept(conn);
        // creating new task
        xTaskCreate( serviceTask, "svc", STACK, (void*)newconn, PRIORITY, NULL)
)
    }
}

// - Connection service task -----------------------------------
void modbusServiceConn(void *conn)
{
    struct netbuf *inbuf = NULL;
    uint8_t *data = NULL;
    int len;

    while (inbuf = netconn_recv(conn))
    {
        netbuf_data(inbuf, (void *)&data, (void *)&len);
        // data processing
        netbuf_delete(inbuf);
        inbuf = NULL;
    }
    netconn_delete(conn);
    conn = NULL;
    vTaskDelete( NULL );
}

Regards,
Gregory



If I run the above code, I can open up to 3 different connection (to same
port).
But,  if I try to make a 4th connection to the TCP listening port (502), it
won´t be possible.
So, that´s the first question: Do you know why can't I open more than 3
connections?

On the other hand, I tried to do something different:
I create two different "server" tasks, listening to two different TCP ports
(let´s say 502 and 503).
Then, from a TCP client application I connected to 502 port, and also to
503 port.
But then, when I tried to open a 3rd connection, to one of those two ports,
I would get rejected..

Why is that happening? Is there anything I can´t see?

My settings in lwipopts.h are:

#define MEMP_NUM_TCP_PCB        6
#define MEMP_NUM_TCP_PCB_LISTEN 6


And part of my firmware code is:

void tcp_Task( void *pvParameters )
{
    err_t error;
    uint16 *tcpListenPort;
    struct netconn *conn = NULL;
    struct netconn *newconn = NULL;

    tcpListenPort = (uint16*) pvParameters;

    conn = netconn_new(NETCONN_TCP);

    if( netconn_bind(conn,IP_ADDR_ANY,(uint16)tcpListenPort) != ERR_OK )
    {
        vTaskDelete(NULL);
    }

    netconn_listen(conn);

    for (;;)
    {
        /* waiting for connection from client */
        error = netconn_accept(conn,&newconn);

        if(error==ERR_OK)
        {
            // creating new task
            sys_thread_new( ( char * ) "svc", serviceTask, (void *)newconn,
350,tskIDLE_PRIORITY + 2 );
        }
    }
}

void serviceTask (void *conn)
{
    struct netbuf *inbuf = NULL;
    err_t error;

    while( (error = netconn_recv(conn,&inbuf)) == 0 )
    {
        //RX Data Handling

    }
    netconn_delete(conn);
    conn = NULL;
    vTaskDelete( NULL );
}

Thank you!

Regards,
Rodrigo G.
_______________________________________________
lwip-users mailing list
[email protected]
https://lists.nongnu.org/mailman/listinfo/lwip-users

Reply via email to