So, I have updated reception code (from the contrib examples httpd_raw) and still the behaviour is the same (code at bottom).
I did a quick and ugly test by calling tcp_ack_now and tcp_output at the end of the function and then the behaviour dramatically improved as ACKs are being sent back and there is no RST from server (as expected). I might also add that each http request I am sending is a blocking call (and awaits a response) with timeout at application level. So practically I am only handling one full transaction at a time. The transactions are deterministic and small in size. So this for me boils down to TCP_WND setting. The http requests I'm sending is roughly at 200 bytes and reception is in equal side so they are fairly small. Is there a guidance on how to set LWIPOPTS variables regarding TCP for this kind of behaviour? Right now my settings are: LWIPOPTS.H #define TCP_MSS 1460 /** * TCP_WND: The size of a TCP window. This must be at least * (2 * TCP_MSS) for things to work well */ #define TCP_WND (2 * TCP_MSS) /** * TCP_SND_BUF: TCP sender buffer space (bytes). * To achieve good performance, this should be at least 2 * TCP_MSS. */ #define TCP_SND_BUF (2 * TCP_MSS) Reception Code: err_t tcp_tx_resp_cb(void *arg, struct tcp_pcb *tpcb, struct pbuf *p, err_t err) { eth_ctx_t* ctx = (eth_ctx_t*)arg; uint8_t* data; if ((err != ERR_OK) || (p == NULL)) { DBG_W(EINVAL, "Ignoring response err '%d'.", err); /* error or closed by other side? */ if (p != NULL) { /* Inform TCP that we have taken the data. */ tcp_recved(tpcb, p->tot_len); pbuf_free(p); } tcp_close(tpcb); return ERR_OK; } if (p->len != p->tot_len) { DBG_E(ECOMM, "Received message is incomplete %d<%d.", p->len, p->tot_len); } /* Acknowledge that we have received the packet */ tcp_recved(pcb_tcp, p->tot_len); if (ctx->recv_buf == NULL){ DBG_W(EINVAL, "Cannot transfer received buffer. No buffer given."); return ERR_OK; } /*** Parse data ***/ if(p != NULL) { pbuf_free(p); } return ERR_OK; }
_______________________________________________ lwip-users mailing list lwip-users@nongnu.org https://lists.nongnu.org/mailman/listinfo/lwip-users