lwip-users
[Top][All Lists]
Advanced

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

[lwip-users] Raw TCP API: question about tcp_close and accept callback i


From: Хазанский Роман
Subject: [lwip-users] Raw TCP API: question about tcp_close and accept callback in
Date: Sat, 29 Sep 2018 15:44:16 +0300

I'm looking at "TCP echo server example using raw API" and trying to 
undrestand it. It creates a listening TCP connection, receives a 
packet, sends it back and then closes the connection. 

In the initialization function, accept callback is registered in lwip 
like this: 

void
echo_init(void) 
{
  echo_pcb = tcp_new();
  <...>
  echo_pcb = tcp_listen(echo_pcb);
  tcp_accept(echo_pcb, echo_accept);

Connection is closed by the server after each echo session, 
like this:

void
echo_close(struct tcp_pcb *tpcb, struct echo_state *es)
{
  tcp_arg(tpcb, NULL);
  tcp_sent(tpcb, NULL);
  tcp_recv(tpcb, NULL);
  tcp_err(tpcb, NULL);
  tcp_poll(tpcb, NULL, 0);
  <...>
  tcp_close(tpcb);

Documentation says that tcp_close will free pcb structure 
(eventually). All of the callbacks that are used for tcp server are 
registered with this structure. 

But when client sends new packet and starts a new connection, accept 
callback is called! Even though tcp_accept(echo_pcb, echo_accept); 
(i.e. callback registration) is done only once in the init function 
and that echo_pcb structure is already freed after tcp_close. 

So I'm confused. I thought callback registration is done on a pcb basis,
i.e. function pointer is copied into pcb. So when pcb is freed all 
callbacks should be registered again for a new pcb.

But this doesn't happen for accept callback.

Please tell me, what am I missing here?



reply via email to

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