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? _______________________________________________ lwip-users mailing list lwip-users@nongnu.org https://lists.nongnu.org/mailman/listinfo/lwip-users