lwip-users
[Top][All Lists]
Advanced

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

Re: [lwip-users] Raw lwIP server write issue


From: Amit Ashara
Subject: Re: [lwip-users] Raw lwIP server write issue
Date: Thu, 5 Nov 2015 13:16:25 -0600

Hello Uwe,

I have the call back for accept set as follows.

In the main application, I call echo_accept.

                server_tpcb = tcp_new();
                ui32Err = tcp_bind(server_tpcb, (ip_addr_t *)&g_ui32IPAddress, NODE_TCP_SERVER_PORT);
                UARTprintf("\n%d",ui32Err);
                server_tpcb = tcp_listen(server_tpcb);
                tcp_accept(server_tpcb, echo_accept);

which is as follows.

static err_t echo_accept(void *arg, struct tcp_pcb *pcb, err_t err)

{
      LWIP_UNUSED_ARG(arg);
      LWIP_UNUSED_ARG(err);

      tcp_setprio(pcb, TCP_PRIO_MIN);
      tcp_arg(pcb, NULL);
      tcp_recv(pcb, echo_recv);
      tcp_err(pcb, echo_err);
      tcp_poll(pcb, NULL, 0);
      return ERR_OK;
}

Do you mean that instead of using pcb I should have another tcp_pcb e,g, newpcb that is assigned from the pcb in the call back.

struct tcp_pcb *newpcb;

static err_t echo_accept(void *arg, struct tcp_pcb *pcb, err_t err)

{
      LWIP_UNUSED_ARG(arg);
      LWIP_UNUSED_ARG(err);

      newpcb = pcb;

      tcp_setprio(pcb, TCP_PRIO_MIN);
      tcp_arg(pcb, NULL);
      tcp_recv(pcb, echo_recv);
      tcp_err(pcb, echo_err);
      tcp_poll(pcb, NULL, 0);
      return ERR_OK;
}

Regards
Amit

On Thu, Nov 5, 2015 at 11:28 AM, Valery Ushakov <address@hidden> wrote:
Amit Ashara <address@hidden> wrote:

> When a connection is established between the server and the client,
> I can use the tcp_write on the client side to send data in my
> application code.  However the same on the server side is not
> possible.  The pcb that has been used for the server only contains
> the server's address and server's port but not the client's address
> and client's port.  In the receive call back on the server side, I
> can send the data to the client but not outside of the call back.

You are using wrong pcb.  On the server you start with a listening
pcb.  When your accept callback is called, it's passed a *new* pcb,
that represents the established connection.  You should use that pcb
for tcp_write.  Writing from receive callback works because in the
receive callback the pcb argument is that connection pcb, not the
original listening pcb.

-uwe


_______________________________________________
lwip-users mailing list
address@hidden
https://lists.nongnu.org/mailman/listinfo/lwip-users


reply via email to

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