lwip-users
[Top][All Lists]
Advanced

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

[lwip-users] Sending and receiving on the same connection


From: Soldavin, Keith A.
Subject: [lwip-users] Sending and receiving on the same connection
Date: Mon, 11 Aug 2014 19:23:56 +0000

I am working on my first project using LWIP 1.4.1 and I am having some trouble. What I need the software to do is to listen on a port for a message from a remote machine and send a response. After it sends the response it needs to send a command to the same remote machine and await a response. I have the first part working fine with the code below. I can listen for a message and send the response with the code below. The problem is with the second part, having the system then send a command to the remote system and wait for a response. If I simply generate the command and send it right after the initial response the remote system doesn’t see it. I have also tried making a separate task that would be triggered by the receive task. The second task creates a new netconn and connects to the remote host. This works for a short while but the responses from the commands are not being processed and shortly fill the memory.

 

Does anyone have any suggestions? I have been stuck on this for a few days now and I am all out of ideas.

 

Thanks

Keith

 

 

static void vInterlockTask1(void *pvParameters)

{

       struct netconn *conn, *newconn;

       err_t err;

       LWIP_UNUSED_ARG(pvParameters);

       struct netbuf *buf;

       uint8_t data[128];

       uint8_t *dataPtr;

       uint16_t len;

 

       /* Create a new connection identifier. */

       conn = netconn_new(NETCONN_TCP);

 

       /* Bind connection to the port number. */

       err = netconn_bind(conn, NULL, INTERLOCK_PORT_1);

       if (err != ERR_OK)

       {

              printf("Netcon Bind Error Status: %d\n",err);

       }

 

       /* Tell connection to go into listening mode. */

       err = netconn_listen(conn);

       if (err != ERR_OK)

       {

              printf("Netcon Listen Error Status: %d\n",err);

       }

 

       while(1)

       {

              if ((err = netconn_accept(conn, &newconn)) == ERR_OK)

              {

                     while ((err = netconn_recv(newconn, &buf)) == ERR_OK)

                     {

                      do

                      {

                            netbuf_data(buf, (void**)&dataPtr, &len);

                            memcpy(&data[0],dataPtr,len);

                            RequestProcessor( dataPtr, &rspBuf[0], &rspLength );

 

                           // Send the response back

                           err = netconn_write(newconn, (void *)&data[0], len, NETCONN_COPY);

                           if (err != ERR_OK)

                           {

                                  printf("Error Status: %d\n",err);

                           }

 

                      } while (netbuf_next(buf) >= 0);

 

                      netbuf_delete(buf);

 

                     /* Command to remote system goes here??? */

                     }

              }

              netconn_close(newconn);

              netconn_delete(newconn);

 

              printf("Newconn error: %d\n",err);

       }

}


reply via email to

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