Numb_Faith <[email protected]> wrote:

> When I use lwip1.4.1 and RAW API, I meet a problem. I use my borad(STM32) as
> a server. When server receive a packet from client, I hope it can send a
> packet immediately. So I call the function below:
> 
> /tcp_write(tpcb, DataTest, sizeof(DataTest), 0x01);
> tcp_output(tpcb);/
> 
> But when server receive a packet, the stack will call tcp_input(), and
> tcp_input_pcb = pcb (the connection), so tcp_output(tpcb) would return.
> 
> When I comment the code below(in function tcp_output), it can got what I
> want. But I'm still confused about why "If we are invoked by the TCP input
> processing code, we do not output anything".
> 
> /* First, check if we are invoked by the TCP input processing code. If so,
> we do not output anything. 
>    Instead, we rely on the input processing code to call us when input
> processing is done with. */
> //  if (tcp_input_pcb == pcb) {
> //  return ERR_OK;
> //  } 

Input processing code _does_ call tcp_output() at:

http://git.savannah.gnu.org/cgit/lwip.git/tree/src/core/tcp_in.c?h=DEVEL-1_4_1#n381

        tcp_input_pcb = NULL;
        /* Try to send something out. */
        tcp_output(pcb);

At that point input processing is complete and pcb is in consistent
state, etc, etc, so tcp_output() doesn't have to be concerned with
possible iteractions with tcp_input().

-uwe


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

Reply via email to